我有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'.
我的问题:
使用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 找到第一个元素时停止迭代