打破内部列表理解

2024-09-27 23:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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']

它正在按我的要求工作。但问题是要从len([ j for j in filterlist if j in i ])>0获取值,它需要循环filterlist中的所有项。因此,即使它与filterlist中的第一个项匹配,循环也必须进行到底。例如当 试着检查'mytest123orannge',如果filterlist中的测试已经匹配它,那么就足够了,我想“中断”循环,这样我就不想循环其余的内容了。所以我不需要匹配'orange'或{}或{}。在

我的问题:

  1. 我怎样才能打破这个循环?在
  2. 还有其他更好的方法吗?在

Tags: of项目方法字符串inforlenif
2条回答

any()与生成器一起使用

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

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

Uri的答案正确,结果列表中最多有一个元素:

print [i for i in datalist if any(j for j in filterList if j in i) ]

['mytest123orange', '2 cup of tea']

如果没有找到匹配项,结果列表将为空。在

结论是any()不会导致“短路”,而是在应用any()之前,整个发电机已经耗尽。在

相关问题 更多 >

    热门问题