打破内部列表理解

and*_*dio 0 python list break

我有datalist和filterlist,我想使用list comprehension方法搜索datalist中的任何项,其中的字符串包含filterlist中的任何单词:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

它正如我想要的那样工作.但问题是,要从中获取值len([ j for j in filterlist if j in i ])>0,它将需要循环过滤器列表中的所有项.因此,即使它与filterlist中的第一项匹配,循环也必须经历直到结束.例如,当尝试检查时'mytest123orannge',如果filterlist中的测试已经匹配,那么就足够了,我想"打破"循环,所以我不想循环其余的.所以我不需要匹配'orange''2''123'.

我的问题:

  1. 我怎么能在那个循环里面打破?
  2. 还有其他更好的方法吗?

Uri*_*ren 5

使用any()与发电机

filterList=['test','2','x','123','orange']
print ([i for i in datalist if any(j for j in filterList if j in i) ])
Run Code Online (Sandbox Code Playgroud)

any 找到第一个元素时停止迭代

  • 您的示例中哪个迭代停止了?filterList 迭代还是 datalist 迭代? (3认同)