4

如果我有以下列表:

listA = ["A","Bea","C"]

和另一个清单

listB = ["B","D","E"]
stringB = "There is A loud sound over there"

检查listA中的任何项目是否出现在listB或stringB中的最佳方法是什么,如果出现则停止?我通常使用 for 循环遍历 listA 中的每个项目来做这样的事情,但是在语法上有更好的方法吗?

for item in listA:
    if item in listB:
        break;
4

2 回答 2

9

要查找两个列表的重叠,您可以执行以下操作:

len(set(listA).intersection(listB)) > 0

if语句中,您可以简单地执行以下操作:

if set(listA).intersection(listB):

但是,如果 inlistA中的任何项目超过一个字母,则 set 方法不适用于查找 in 中的项目stringB,因此最好的选择是:

any(e in stringB for e in listA)
于 2013-06-24T20:04:31.933 回答
1

您可以any在此处使用:any将短路并在找到的第一个匹配项处停止。

>>> listA = ["A","B","C"]
>>> listB = ["B","D","E"]
>>> stringB = "There is A loud sound over there"
>>> lis = stringB.split()
>>> any(item in listA or item in lis for item in listA) 
True

如果listB很大或者返回的列表stringB.split()很大,那么您应该将它们转换为setsfirst 以提高复杂性:

>>> se1 =  set(listB)
>>> se2 = set(lis)
>>> any(item in se1 or item in se2 for item in listA)
True

如果您在该字符串中搜索多个单词,请使用regex

>>> import re
>>> listA = ["A","B","C"]
>>> listB = ["B","D","E"]
>>> stringB = "There is A loud sound over there"
>>> any(item in listA or re.search(r'\b{}\b'.format(item),stringB)
                                                              for item in listA) 
于 2013-06-24T20:04:29.017 回答