gpt4 book ai didi

Python:检查两个列表之间字符串的部分匹配

转载 作者:行者123 更新时间:2023-11-28 16:35:21 24 4
gpt4 key购买 nike

我有两个列表,如下所示:

c = ['John', 'query 989877 forcast', 'Tamm']
isl = ['My name is Anne Query 989877', 'John', 'Tamm Ju']

我想检查 isl 中的每个项目和 c 中的每个项目,以便我得到所有部分字符串匹配。我需要的输出如下所示:

out = ["john", "query 989877", "tamm"]

可以看出,我也得到了部分字符串匹配。

我试过以下方法:

 out = []
for word in c:
for w in isl:
if word.lower() in w.lower():
out.append(word)

但这只会给我输出

out = ["John", "Tamm"]

我也尝试过以下方法:

print [word for word in c if word.lower() in (e.lower() for e in isl)]

但这只输出“John”。我怎样才能得到我想要的东西?

最佳答案

也许是这样的:

def get_sub_strings(s):
words = s.split()
for i in xrange(1, len(words)+1): #reverse the order here
for n in xrange(0, len(words)+1-i):
yield ' '.join(words[n:n+i])
...
>>> out = []
>>> for word in c:
for sub in get_sub_strings(word.lower()):
for s in isl:
if sub in s.lower():
out.append(sub)
...
>>> out
['john', 'query', '989877', 'query 989877', 'tamm']

如果您只想存储最大的匹配项,那么您需要以相反的顺序生成子字符串,并在 isl 中找到匹配项后立即中断:

def get_sub_strings(s):
words = s.split()
for i in xrange(len(words)+1, 0, -1):
for n in xrange(0, len(words)+1-i):
yield ' '.join(words[n:n+i])

out = []
for word in c:
for sub in get_sub_strings(word.lower()):
if any(sub in s.lower() for s in isl):
out.append(sub)
break

print out
#['john', 'query 989877', 'tamm']

关于Python:检查两个列表之间字符串的部分匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com