我有一个功能。 matchCondition(a)
,取整数并返回True或False。
我有一个包含10个整数的列表。我想返回列表中的第一个项目(与原始列表的顺序相同),matchCondition
返回True。
尽可能诡异。
答案 0 :(得分:47)
next(x for x in lst if matchCondition(x))
应该有效,但如果列表中没有任何元素匹配,它将引发StopIteration
。您可以通过向next
提供第二个参数来抑制它:
next((x for x in lst if matchCondition(x)), None)
如果没有匹配,将返回None
。
演示:
>>> next(x for x in range(10) if x == 7) #This is a silly way to write 7 ...
7
>>> next(x for x in range(10) if x == 11)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> next((x for x in range(10) if x == 7), None)
7
>>> print next((x for x in range(10) if x == 11), None)
None
最后,为了完整性,如果你想要 all 列表中匹配的项目,那就是内置filter
函数的用途:
all_matching = filter(matchCondition,lst)
在python2.x中,它返回一个列表,但是在python3.x中,它返回一个可迭代的对象。
答案 1 :(得分:4)
使用break
声明:
for x in lis:
if matchCondition(x):
print x
break #condition met now break out of the loop
现在x
包含您想要的项目。
<强>证明:强>
>>> for x in xrange(10):
....: if x==5:
....: break
....:
>>> x
>>> 5