首页 > 解决方案 > 如何从 Python 中的列表列表中删除所有重复元素,同时删除原始元素

问题描述

我试图比较许多不同波形的傅立叶变换之间的差异。每个变换中最突出的峰值(单个频率)位于单个列表中。我想在所有列表中找到共同的峰值/元素并完全删除它们。例如:

输入:

List1=[1,2,3,4,5,6,11]
List2=[2,3,7,8,9]
List3=[9,1,8,5,10,12]
ListofListIn=[List1,List2,List3]

输出:

List1=[4,6,11]
List2=[7]
List3=[10,12]
ListofListOut=[List1,List2,List3]

我需要它来处理任意数量的任意大小的列表。我可能有 50 多个不同大小的列表。只要单独列表的元素不混合,我不关心单独列表中的顺序。

我已经研究过,set.intersection但我的理解是它只会将一组与另一组进行比较,如果我有未知数量的列表,更不用说做我想要的每组都需要与其他每组相交 50* 50=2500 这是许多交叉点。也set.intersection只删除重复项而不是原始项。

我希望我正在尝试做的事情对你们那里的 python 向导有意义。我已经在这里撞了几个小时的砖墙了,任何提供的帮助都将不胜感激。

标签: pythonlistduplicatessetintersection

解决方案


使用collections.Counter

>>> List1=[1,2,3,4,5,6,11]
>>> List2=[2,3,7,8,9]
>>> List3=[9,1,8,5,10,12]
>>> from collections import Counter
>>> c = Counter(i for a in (List1, List2, List3) for i in a)
>>> [i for i in List1 if c[i] == 1]
[4, 6, 11]
>>> [i for i in List2 if c[i] == 1]
[7]
>>> [i for i in List3 if c[i] == 1]
[10, 12]

推荐阅读