擅长:python、mysql、java
<p>如果您是Python新手,那么现在使用Chris answer中的经典方法可能会更好。但是如果您对生成器感到好奇,请参见下面使用生成器表达式的示例(基本上与Chris answer相同,但更简洁):</p>
<pre><code>>>> mylist = ['hola pepe', 'hola manola', 'hola julian', 'holasofi', 'oi pepe']
>>> gen = ((index,elem) for index, elem in enumerate(mylist) if 'pepe' in elem)
>>> next(gen)
(0, 'hola pepe')
>>> next(gen)
(4, 'oi pepe')
>>> next(gen)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
</code></pre>
<p>索引可以像往常一样提取</p>
<pre><code>>>> next(gen)[0]
</code></pre>
<p>即使生成器表达式中没有与if子句匹配的元素,也始终会创建生成器对象。你知道吗</p>
<p>要在<code>next()</code>不产生更多值时处理异常,请使用<code>try</code>块捕获<code>StopIteration</code>:</p>
<pre><code>search = 'pepe'
...
try:
next_result = next(gen)
except StopIteration:
print('No more matches for {}'.format(search))
</code></pre>