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

2024-04-25 05:14:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,如果我有一个对象列表,并且我想获得那些具有属性obj.val==5的对象的第一个对象。我当然可以使用列表理解,但这会产生O(n),如果n很大,那就是浪费。一旦满足条件,我还可以使用带break的循环,但我认为可能有一个更为python/优雅的解决方案。


Tags: 对象方法obj列表属性浪费val解决方案
1条回答
网友
1楼 · 发布于 2024-04-25 05:14:23

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

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

网友
2楼 · 发布于 2024-04-25 05:14:23
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))

如果找到,它将返回对象,否则它将返回“未找到”

相关问题 更多 >