Python:根据索引集从列表中选择子集

标签 python list

我有几个列表具有相同数量的条目(每个都指定一个对象属性):

property_a = [545., 656., 5.4, 33.]
property_b = [ 1.2,  1.3, 2.3, 0.3]
...

并列出具有相同长度的标志

good_objects = [True, False, False, True]

(可以很容易地用等效的索引列表代替:

good_indices = [0, 3]

生成新列表 property_aselproperty_bsel、... 的最简单方法是什么,这些列表仅包含 True 指示的值条目还是索引?

property_asel = [545., 33.]
property_bsel = [ 1.2, 0.3]

最佳答案

您可以使用 list comprehension :

property_asel = [val for is_good, val in zip(good_objects, property_a) if is_good]

property_asel = [property_a[i] for i in good_indices]

后一种更快,因为 good_indicesproperty_a 的长度少,假设 good_indices 是预先计算的而不是生成的-飞。


Edit:第一个选项等价于 Python 2.7/3.1 以来可用的 itertools.compress。见 @Gary Kerr的答案。

property_asel = list(itertools.compress(property_a, good_objects))

关于Python:根据索引集从列表中选择子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3179106/

相关文章:

java 8根据属性比较2个列表

python - 在python中创建二维数组的两种方法

java - 是否可以创建一个数组列表?

python - 使用 2d numpy 数组切片 3d numpy 数组

python - 为什么在 Python 中只有当有 print 语句时才会出现 UnicodeEncodeError?

python - 列表理解与列表和元组列表

python - selenium - WebDriverWait().until(myFunc) 可以使用 WebDriver 之外的函数吗?

java - 在 Android 中将 List<List<String>> 转换为 ArrayList<String>

python - 从字符串 python 创建单项元组

python - python中的urllib,如何检查是否收到响应?