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

时间:2013-06-06 13:10:04

标签: python python-2.7

我一直在寻找一种优雅(简短!)的方式来返回匹配特定条件的列表的第一个元素,而不必评估列表中每个元素的条件。最终我提出了:

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

有更好的方法吗?

更确切地说:内置了python函数,例如all()any() - 像first()这样的东西也没有意义吗?出于某种原因,我不喜欢在我的解决方案中调用next()

4 个答案:

答案 0 :(得分:11)

怎么样:

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

答案 1 :(得分:8)

不 - 看起来不错。我很想重写:

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作为例外

答案 2 :(得分:1)

我建议使用

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

next(ifilter(my_criteria, mylist), None)

答案 3 :(得分:0)

with for循环

lst = [False,'a',9,3.0]
for x in lst:
    if(isinstance(x,float)):
        res = x
        break

print res