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

发布于 2021-01-29 17:12:01

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

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]
关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以只使用列表推导

    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))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看