如何返回列表列表中的重复值?

时间:2018-10-31 23:57:39

标签: python

我正在尝试在列表列表中返回重复的值。说我创建一个列表

my_list = [[5,5,4,6,5,6], [6,7,5,8,4],[2,1,3,9,8]]

我想返回每个列表,其中每个列表都有重复的值。预期的输出将是

[[5,6],[],[]]

我想我需要使用嵌套的for循环来访问该列表中的每个数字。

for alist in my_list:
    for number in alist:
        pass

我也在考虑使用成员资格声明来查看它是否在其中一次,但是我不确定我是否正确实现了

2 个答案:

答案 0 :(得分:5)

您可以使用Counter

from collections import Counter

my_list = [[5, 5, 4, 6, 5, 6], [6, 7, 5, 8, 4], [2, 1, 3, 9, 8]]

result = [[k for k, v in counts.items() if v > 1] for counts in map(Counter, my_list)]
print(result)

输出

[[5, 6], [], []]

说明

Counter创建一个字典,其中的键是每个内部列表的值,而值是每个元素的计数。例如:

Counter([5, 5, 4, 6, 5, 6])

创建以下对象:

Counter({5: 3, 6: 2, 4: 1})

然后items返回一个元组列表,使用与上面相同的示例:

[(4, 1), (5, 3), (6, 2)]

然后使用list comprehension仅获得计数大于1的那些值。

答案 1 :(得分:2)

列表理解对此非常有效

my_list = [[5,5,4,6,5,6], [6,7,5,8,4],[2,1,3,9,8]]

duplicates = [list(set([value for value in sublist if sublist.count(value) > 1])) for sublist in my_list]

print(duplicates)

这给出了输出

[[5, 6], [], []]

正在发生的事情是我们在“ my_list”中的三个列表中循环。只要该子列表中该值的“计数”大于1,我们就会保留它。

然后我们将转换为一个集合,该集合将删除所有重复项(否则,我们仍将有三个实例'5'和两个实例'6')。

将其转换为集合(然后返回列表)将删除所有重复项,仅留下我们要寻找的多个出现值。