比较两个列表时查找匹配字符串

9
我正在尝试比较两个列表,看看列表中是否有匹配的字符串。
假设`list_1`是:
['GAAGGTCGAA', 'GAAGGTCGA', 'AAGGTCGAA', 'GAAGGTCG', 'AAGGTCGA', 'AGGTCGAA', 'GAAGGTC', 'AAGGTCG', 'AGGTCGA', 'GGTCGAA', 'GAAGGT', 'AAGGTC', 'AGGTCG', 'GGTCGA', 'GTCGAA', 'GAAGG', 'AAGGT', 'AGGTC', 'GGTCG', 'GTCGA', 'TCGAA', 'GAAG', 'AAGG', 'AGGT', 'GGTC', 'GTCG', 'TCGA', 'CGAA', 'GAA', 'AAG', 'AGG', 'GGT', 'GTC', 'TCG', 'CGA', 'GAA', 'GA', 'AA', 'AG', 'GG', 'GT', 'TC', 'CG', 'GA', 'AA', 'G', 'A', 'A', 'G', 'G', 'T', 'C', 'G', 'A', 'A']

"list_2" 是什么意思?
['CCTCGGGA', 'CCTCGGG', 'CTCGGGA', 'CCTCGG', 'CTCGGG', 'TCGGGA', 'CCTCG', 'CTCGG', 'TCGGG', 'CGGGA', 'CCTC', 'CTCG', 'TCGG', 'CGGG', 'GGGA', 'CCT', 'CTC', 'TCG', 'CGG', 'GGG', 'GGA', 'CC', 'CT', 'TC', 'CG', 'GG', 'GG', 'GA', 'C', 'C', 'T', 'C', 'G', 'G', 'G', 'A', '', '', '', '', '', '', '', '', '', 'CCTCGGG', '', '', '', '', '', '', '', '', '']

我知道"TCG"在两个列表中都出现了,但是我应该在Python中使用什么类型的函数来确定这一点呢?我尝试了for循环和许多其他内置函数,但是我无法使其工作。

你只需要一个布尔值作为结果吗? - Pedro Lobito
我不明白拥有两个列表与此有什么关系。 - ergonaut
所以你想要子字符串匹配? - cbare
子字符串匹配,是的。我想不到一个词来形容它。现在我可以在网上找到它了。谢谢。 - Rsherrill
对我来说,列表与此无关,并且我投票将其视为 https://dev59.com/zGYq5IYBdhLWcg3w30Xc 的重复。 - ergonaut
你想匹配仅部分匹配的字符串吗? - digitaLink
3个回答

7

这其实很简单,使用set即可。

print set(list_1) & set(list_2)
print bool(set(list_1) & set(list_2))
# set(['A', 'C', 'G', 'CG', 'GG', 'T', 'GA', 'TCG', 'TC']) //common strings
# true //Boolean result

演示

http://ideone.com/y0GltE


可以只打印最大公共子串吗? - Rsherrill
“最长公共子串”是什么意思? - Pedro Lobito
sorted(set(list_1) & set(list_2), reverse=True)[0] 没有适当的错误检查。 - AChampion
我最终选择了for循环,因为它更适合我想要做的事情。如果我想要打印两个匹配项,但它们的长度相同,我该怎么做? - Rsherrill

4

bool(set(list_1) & set(list_2))


0

如果你需要多个布尔变量,这是一个使用for循环的解决方案。

for item1 in list1:
    for item2 in list2:
        if item1 == item2:
            print item1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接