2024-04-25 05:14:23 发布
网友
找到/返回符合特定条件的第一个列表项的最优雅和有效的方法是什么?
例如,如果我有一个对象列表,并且我想获得那些具有属性obj.val==5的对象的第一个对象。我当然可以使用列表理解,但这会产生O(n),如果n很大,那就是浪费。一旦满足条件,我还可以使用带break的循环,但我认为可能有一个更为python/优雅的解决方案。
obj.val==5
break
如果对象没有任何其他索引或排序信息,则必须迭代,直到找到此类对象:
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.75毫秒,第二个需要58.3微秒(因为回路缩短了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))
如果找到,它将返回对象,否则它将返回“未找到”
如果对象没有任何其他索引或排序信息,则必须迭代,直到找到此类对象:
不过,这比完整的列表理解还要快。比较这两个:
第一个需要5.75毫秒,第二个需要58.3微秒(因为回路缩短了100倍,所以速度快了100倍)。
如果找到,它将返回对象,否则它将返回“未找到”
相关问题 更多 >
编程相关推荐