在python中为多个字符串查找列表

时间:2016-07-12 15:59:37

标签: python list

如果检测到字符串' 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])

但这不起作用。

4 个答案:

答案 0 :(得分:1)

您可以使用二元运算符orand,具体取决于您的意图,但与您完成的方式略有不同:

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])