查找与条件匹配的第一个序列项

发布于 2021-01-29 16:43:26

这个问题已经在这里有了答案

从符合条件的可迭代项中获取第一项 (13个答案)

4年前关闭。

查找/返回符合特定条件的第一个列表项的最优雅,最有效的方法是什么?

例如,如果我有一个对象列表,而我想使用attribute来获取那些对象的第一个对象obj.val==5。我当然可以使用列表推导,但这会导致O(n),如果n大,那是浪费的。break一旦满足条件,我也可以使用一个循环,但是我认为可能会有更多的pythonic
/ elegant解决方案。

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果您的对象没有任何其他索引或排序信息,则必须迭代直到找到这样的对象:

    next(obj for obj in objs if obj.val == 5)
    

    但是,这比完整的列表理解要快。比较这两个:

    [i for i in xrange(100000) if i == 1000][0]
    
    next(i for i in xrange(100000) if i == 1000)
    

    第一个需要5.75ms,第二个需要58.3µs(快100倍,因为循环时间缩短了100倍)。



知识点
面圈网VIP题库

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

去下载看看