首页 > 解决方案 > 查找列表中项目结尾的重复项

问题描述

我想在字符串的最后 3 个字符内查找具有重复结尾的列表中的项目

我知道如何使用下面的代码查找重复项,但需要有关如何查找“sara”和“tamara”的最后一个字符串相同的代码帮助,以便可以将其中一项复制到 duplicate_finding 列表

使用以下代码,我只能识别列表的确切重复项:

names = ["tom", "john", "sara" , "tamara" , "tom"]
single_finds = []
duplicate_finds = []

for i in names:
        if i in single_finds:
                duplicate_finds.append(i)
        else:
                single_finds.append(i)

print (single_finds)
print (duplicate_finds)

输出:

['tom', 'john', 'sara', 'tamara']
['tom']

标签: pythonlist

解决方案


一种方法是使用,指定我们要使用参数itertools.groupby根据最后一个n字符进行分组。key

然后我们可以展平列表,删除那些仅1使用 item的子列表,itertools.chain并使用一个集合来删除重复项(或者list如果你想要它们):

from itertools import groupby, chain
k = lambda x: x[-3:]
l = [list(v) for _,v in groupby(sorted(names, key=k), key=k)]
# [['tamara', 'sara'], ['john'], ['tom', 'tom']]
[i[0] for i in l if len(i) > 1]
# ['tamara', 'tom']

推荐阅读