找到匹配条件的第一个列表项

问题:

找到/返回匹配某个标准的第一个列表项的最优雅和最有效的方法是什么?
例如,如果我有一个对象的列表,并且我想获得具有属性obj.val==5的那些的第一个对象。我当然可以使用列表的理解,但是会导致O(n),如果n大,那就是浪费的。一旦满足标准,我也可以使用break的循环,但我认为可能会有更多的pythonic /优雅的解决方案。

回答:

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

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

Code问答: http://codewenda.com/topics/python/
Stackoverflow: find first list item that matches criteria

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 1 =