查找符合条件的第一个序列项[重复]
- 2025-03-26 09:09:00
- admin 原创
- 14
问题描述:
查找/返回符合特定条件的第一个列表项的最优雅和最有效的方法是什么?
例如,如果我有一个对象列表,我想获取具有属性 的第一个对象obj.val==5
。我当然可以使用列表推导,但这会导致 O(n),如果 n 很大,那就太浪费了。一旦满足条件,我也可以使用循环break
,但我认为可能有一个更 Pythonic/优雅的解决方案。
解决方案 1:
如果您的对象没有任何其他索引或排序信息,那么您将必须进行迭代直到找到这样的对象:
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 倍)。
解决方案 2:
如果找到则返回该对象,否则返回"not found"
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))
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD