查找条件为tru的第一个列表元素

2024-04-24 20:45:27 发布

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

我在找一个优雅的(短!)返回与特定条件匹配的列表的第一个元素,而不必为列表的每个元素计算条件的方法。最后我想到:

(e for e in mylist if my_criteria(e)).next()

有更好的办法吗?

更准确地说:python内置了诸如all()any()之类的函数,有类似first()这样的函数难道不合理吗?出于某种原因,我不喜欢在我的解决方案中调用next()


Tags: 方法函数in元素列表forifmy
3条回答

不-看起来不错。我可能会想重新写:

from itertools import ifilter
next(ifilter(my_criteria, e))

或者至少将计算分解成一个生成器,然后使用它:

blah = (my_function(e) for e in whatever)
next(blah) # possibly use a default value

另一种方法,如果您不喜欢next

from itertools import islice
val, = islice(blah, 1)

如果它是“空的”,则会给您一个ValueError异常

怎么样:

next((e for e in mylist if my_criteria(e)), None)

我提议使用

next((e for e in mylist if my_criteria(e)), None)

或者

next(ifilter(my_criteria, mylist), None)

相关问题 更多 >