遍历python3的字符串列表,将每个项与其他项进行匹配,并返回最大的匹配项

2024-09-29 01:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python列表。在这个列表中,我需要将每个项目与其他项目进行比较,并用最长的字符串替换较短的字符串。你知道吗

编辑:我有一个使用Spacy模块和实体提取得到的人名列表。我得到一个列表,有时是全名,有时是部分名字。我想规范化这个列表,所以它总是全名(或者文章中最长的名字)。这将帮助我确定谁是文章中最突出/提到的人。你知道吗

small_example = ['David', 'David Stevens', 'Steve Martin' ]
small_example_outcome = [ 'David Stevens','David Stevens', 'Steve Martin'] 

完整示例:

person_list = [ 'Omarosa Manigault Newman', 'Manigault Newman','Trump', 'Apprentice', 'Mark Burnett', Manigault Newman','TAPES', 'Omarosa', 'Donald J. Trump','Omarosa', 'Donald J. Trump', 'Jacques Derrida', 'Derrida', 'Sigmund Freud', 'Mark Burnett', 'Manigault Newman', 'Manigault Newman', 'Trump', 'Mark Burnett' ]

Ideally what I'd have in the end is:       
corrected_list = [ 'Omarosa Manigault Newman', 'Omarosa Manigault Newman', 'Donald J. Trump', 'Apprentice', 'Mark Burnett', 'Omarosa Manigault Newman', 'TAPES', 'Omarosa', 'Donald J. Trump', 'Omarosa Manigault Newman', 'Donald J. Trump', 'Jacques Derrida', 'Jacques Derrida', 'Sigmund Freud', 'Mark Burnett', 'Omarosa Manigault Newman', 'Omarosa Manigault Newman', 'Donald J. Trump', 'Mark Burnett' ]

但这样的清单也行:

normalized_list = ['Omarosa Manigault Newman', 'Apprentice', 'Mark Burnett', 'TAPES', 'Jacques Derrida', 'Donald J. Trump', 'Sigmund Freud']

Tags: 列表listdavidmarkdonaldstevensnewmantrump
1条回答
网友
1楼 · 发布于 2024-09-29 01:26:38

我想你要找的是每个字符串是否是列表中另一个字符串的子字符串?你知道吗

如果列表很短,比如这个,我们可以用一个愚蠢的二次搜索:

corrected_list = []
for person in person_list:
    matches = (other for other in person_list if person in other)
    longest = max(matches, key=len)
    corrected_list.append(longest)

如果你的列表很大,这会太慢,我们需要做一些更聪明的事情,比如构建前缀和后缀。但对于这么小的东西,我觉得这太过分了。你知道吗

相关问题 更多 >