当前位置: 首页 > 面试题库 >

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

傅宏恺
2023-03-14
问题内容

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

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]

问题答案:

您可以只使用列表推导:

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_indices的长度小于的长度property_a,并假设good_indices它们是预先计算的,而不是即时生成的。

编辑 :第一个选项等效于itertools.compressPython 2.7 / 3.1之后的版本。请参阅@Gary
Ker的答案。

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


 类似资料: