find符合条件的第一个序列项目
find/返回符合某个标准的第一个列表项目最优雅和有效的方式是什么?
例如,如果我有一个对象的列表,我想获得属性obj.val==5
的第一个对象。 我当然可以使用列表理解,但是会产生O(n),如果n很大,这是浪费的。 一旦达到标准,我也可以使用一个循环,但我认为可能会有一个pythonic /优雅的解决scheme。
如果您没有任何其他索引或对象的sorting信息,那么您将不得不迭代,直到find这样一个对象:
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倍)。
a=[100,200,300,400,500] def search(b): try: k=a.index(b) return a[k] except ValueError: return 'not found' print(search(500))
它会返回对象,如果发现其他将返回“找不到”