本文提供了一种 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']
Python 代码实现多个列表相似字符串合并

原文地址: https://www.cveoy.top/t/topic/mUh4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录