如何检查数组中的任何字符串是否存在于另一个字符串中?

例如:

a = ['a', 'b', 'c']
s = "a123"
if a in s:
    print("some of the strings found in s")
else:
    print("no strings found in s")

我如何替换如果a在s:行得到适当的结果?


当前回答

这取决于上下文 假设你想检查单个文字(任何单个单词a,e,w,..等)就足够了

original_word ="hackerearcth"
for 'h' in original_word:
      print("YES")

如果你想检查original_word中的任何一个字符: 利用

if any(your_required in yourinput for your_required in original_word ):

如果您想要original_word中的所有输入,请使用所有输入 简单的

original_word = ['h', 'a', 'c', 'k', 'e', 'r', 'e', 'a', 'r', 't', 'h']
yourinput = str(input()).lower()
if all(requested_word in yourinput for requested_word in original_word):
    print("yes")

其他回答

flog = open('test.txt', 'r')
flogLines = flog.readlines()
strlist = ['SUCCESS', 'Done','SUCCESSFUL']
res = False
for line in flogLines:
     for fstr in strlist:
         if line.find(fstr) != -1:
            print('found') 
            res = True


if res:
    print('res true')
else: 
    print('res false')

如果你想要的只是True或False, any()是目前为止最好的方法,但如果你想知道具体匹配哪个字符串/字符串,你可以使用一些东西。

如果你想要第一个匹配(默认为False):

match = next((x for x in a if x in str), False)

如果你想获得所有匹配项(包括重复项):

matches = [x for x in a if x in str]

如果你想获得所有非重复的匹配(不考虑顺序):

matches = {x for x in a if x in str}

如果你想按正确的顺序获得所有非重复的匹配项:

matches = []
for x in a:
    if x in str and x not in matches:
        matches.append(x)

的元素上进行迭代。

a = ['a', 'b', 'c']
str = "a123"
found_a_string = False
for item in a:    
    if item in str:
        found_a_string = True

if found_a_string:
    print "found a match"
else:
    print "no match found"

为了降低复杂度,jbernadas已经提到了aho - corasick -算法。

下面是在Python中使用它的一种方法:

从这里下载aho_corasick.py 将它放在与Python主文件相同的目录中,并将其命名为aho_corasick.py 用以下代码尝试该算法: 导入aho_corasick #(字符串,关键字) Print (aho_corasick(string, ["keyword1", "keyword2"]))

注意,搜索是区分大小写的

如果a或str中的字符串变长,您应该小心。简单的解决方案是O(S*(A^2)),其中S是str的长度,A是A中所有字符串长度的总和。要获得更快的解决方案,请查看用于字符串匹配的Aho-Corasick算法,该算法在线性时间O(S+A)内运行。