如果检测到字符串' Device'我写下面的函数返回True。在列表中
def data_filter2(inner_list):
return any(['Device' in str(x) for x in inner_list])
有没有办法在列表中搜索多个字符串并返回True它会找到一个?
我试过
def data_filter2(inner_list):
return any(['Device' or 'Drug' in str(x) for x in inner_list])
但这不起作用。
答案 0 :(得分:1)
您可以使用二元运算符or
或and
,具体取决于您的意图,但与您完成的方式略有不同:
def data_filter2(inner_list):
return any('Device' in str(x) or 'Drug' in str(x) for x in inner_list)
您可以使用生成器表达式,并避免为检查创建新列表。
答案 1 :(得分:1)
如果您颠倒逻辑怎么办?
def data_filter2(inner_list):
return any([str(x) in ['Device', 'Drug'] for x in inner_list])
这提供了一个框架,可以“接受”更多要检查的项目。链接or
对我来说不是很诡异。
这里有趣的是:
alist_ = ['drugs', '123123']
astring = 'drug'
for i in range(len(alist_)):
print(astring in alist_[i])
print('-----')
print(astring in alist_)
#prints:
#True
#False
#-----
#False
这说明在列表中搜索字符串要求字符串相同(区分大小写)但是在字符串中搜索字符串也允许子字符串返回True
。
答案 2 :(得分:1)
使用any
和comprenhension的解决方案很好。另一种选择是使用集合交集。
In [30]: bool(set(['aaa', 'foo']) & set(['foo']))
Out[30]: True
In [31]: bool(set(['aaa', 'foo']) & set(['bar']))
Out[31]: False
答案 3 :(得分:0)
你可以在一行中这样做:
def data_filter2(inner_list):
return any([x in y for x in ['Device', 'Drug'] for y in inner_list])