我想在列表中找到在字符串的后3个字符内具有重复结尾的项目
我知道如何使用下面的代码查找重复项,但是需要代码帮助,如何找到“ sara”和“ tamara”的最后一个字符串相同,以便可以将其中一个项复制到plicate_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)
Run Code Online (Sandbox Code Playgroud)
输出:
['tom', 'john', 'sara', 'tamara']
['tom']
Run Code Online (Sandbox Code Playgroud)
一种方法是使用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']
Run Code Online (Sandbox Code Playgroud)