python - 查找列表中项目结尾的重复项
问题描述
我想在字符串的最后 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']
解决方案
一种方法是使用,指定我们要使用参数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']
推荐阅读
- c++ - 将模板与多态性混合
- mongodb - 如何通过 storageSize 而不是 dataSize 创建上限集合?
- bash - 在 linux 中使用现有列创建一个新列,并且输出的分隔符与输入的分隔符不同
- c# - 安装时如何将exe.config文件放在AppData中?
- javascript - JS 两个值变化之间的平滑过渡
- excel - 需要修改代码添加10个空行
- java - 如何使用 Java Result 调试崩溃:error_code
- mysql - MySQL 5.7 按特定的 30 分钟间隔分组
- python - 如何将多维数组转换为二维数组
- azure - 用于虚拟 WAN 中“将站点与集线器关联”的 Rest API