我有几个具有相同数量条目的列表(每个条目都指定一个对象属性):
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_asel
,property_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.compress
Python 2.7 / 3.1之后的版本。请参阅@Gary
Ker的答案。
property_asel = list(itertools.compress(property_a, good_objects))