查找首个满足条件的序列项[duplicate]

42 浏览
0 Comments

查找首个满足条件的序列项[duplicate]

这个问题已经在这里有了答案:

从满足条件的可迭代对象中获取第一个元素

找到/返回第一个满足特定条件的列表项会是最优雅和高效的方法是什么?

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

admin 更改状态以发布 2023年5月24日
0
0 Comments

如果找到对象,它将返回该对象,否则它将返回"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))

0
0 Comments

如果您没有任何其他关于您的对象的索引或排序信息,那么您将不得不迭代直到找到这样的对象:

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

0