<p>我有datalist和filterlist,我想用list comprehension方法搜索datalist中的任何一个项目,它的字符串包含filterlist中的任何单词:</p>
<pre><code>>>> datalist=['mytest123orange','dark angle','double69','spartan','broken image 999','2 cup of tea']
>>> filterlist=['test','2','x','123','orange']
>>> print [i for i in datalist if len([ j for j in filterlist if j in i])>0 ]
['test123orange', '2 cup of tea']
</code></pre>
<p>它正在按我的要求工作。但问题是要从<code>len([ j for j in filterlist if j in i ])>0</code>获取值,它需要循环filterlist中的所有项。因此,即使它与filterlist中的第一个项匹配,循环也必须进行到底。例如当
试着检查<code>'mytest123orannge'</code>,如果filterlist中的测试已经匹配它,那么就足够了,我想“中断”循环,这样我就不想循环其余的内容了。所以我不需要匹配<code>'orange'</code>或{<cd4>}或{<cd5>}。在</p>
<p>我的问题:</p>
<ol>
<li>我怎样才能打破这个循环?在</li>
<li>还有其他更好的方法吗?在</li>
</ol>
<p>将<code>any()</code>与生成器一起使用</p>
<pre><code>filterList=['test','2','x','123','orange']
print ([i for i in datalist if any(j for j in filterList if j in i) ])
</code></pre>
<p>当找到第一个元素时,<code>any</code>停止迭代</p>