擅长:python、mysql、java
<p>利用<a href="https://stackoverflow.com/q/9542738/10077">an answer to a related question</a>的提示,并借用塔拉斯发布的答案,我想到了这个:</p>
<pre><code>>>> lst=[1,2,10,3,5,3,4]
>>> next(n for n in lst if n%5==0)
10
</code></pre>
<p>稍微修改一下,您将得到索引而不是值:</p>
^{pr2}$
<p>现在,如果没有匹配项,这将引发一个异常StopIteration。您可能需要使用一个处理异常的函数,如果没有匹配项,则返回<code>None</code>:</p>
<pre><code>def first_match(iterable, predicate):
try:
return next(idx for idx,n in enumerate(iterable) if predicate(n))
except StopIteration:
return None
lst=[1,2,10,3,5,3,4]
print(first_match(lst, lambda x: x%5 == 0))
</code></pre>
<p>请注意,这使用的是生成器表达式,而不是列表理解。列表理解将把条件应用到列表的每个成员,并生成一个包含所有匹配项的列表。这会将其应用于每个成员,直到找到匹配项,然后停止,这是解决问题的最小工作量。在</p>