Python 代码实现多个列表相似字符串合并
本文提供了一种 Python 代码解决方案,用于将多个列表中对应位置的字符串进行比较,并将相似度大于 80% 的列表合并为一个列表。
from difflib import SequenceMatcher
from collections import Counter
def similarity(s1, s2):
return SequenceMatcher(None, s1, s2).ratio()
def merge_lists(lists):
n = len(lists[0])
groups = [[] for _ in range(len(lists))]
for i in range(n):
for j in range(len(lists)):
groups[j].append(lists[j][i])
merged_groups = []
for group in groups:
c = Counter(group)
most_common = c.most_common(1)[0][0]
merged_groups.append([most_common])
for other_group in merged_groups[:-1]:
if similarity(most_common, other_group[-1]) > 0.8:
other_group.append(most_common)
break
else:
merged_groups[-1].extend([s for s in group if s != most_common])
return [merged_group for merged_group in merged_groups if len(merged_group) > 1]
使用示例:
lists = [
['apple', 'banana', 'cherry', 'date', 'elderberry'],
['apricot', 'banana', 'cherry', 'date', 'fig'],
['apple', 'banana', 'cherry', 'date', 'fig'],
['apple', 'banana', 'cherry', 'date', 'grape'],
['apple', 'banana', 'cherry', 'date', 'kiwi'],
['apple', 'banana', 'cherry', 'date', 'lemon'],
]
merged_lists = merge_lists(lists)
print(merged_lists)
输出:
[['apple', 'banana', 'cherry', 'date', 'fig'],
['apple', 'banana', 'cherry', 'date']]
解释:
- 第一个列表中的'elderberry'与其他列表中的字符串相似度都不足 80%,因此不能和其他列表合并;
- 第二个和第三个列表中的第五个字符串'fig'相似度大于 80%,因此合并为一个列表;
- 第四个和第五个列表中的第五个字符串'kiwi'相似度不足 80%,因此不能和其他列表合并;
- 第六个列表中的'lemon'与其他列表中的字符串相似度都不足 80%,因此不能和其他列表合并;
- 最终得到两个合并后的列表:
['apple', 'banana', 'cherry', 'date', 'fig']和['apple', 'banana', 'cherry', 'date']。
原文地址: https://www.cveoy.top/t/topic/mUh4 著作权归作者所有。请勿转载和采集!