我正在尝试在列表列表中返回重复的值。说我创建一个列表
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
我也在考虑使用成员资格声明来查看它是否在其中一次,但是我不确定我是否正确实现了
答案 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')。
将其转换为集合(然后返回列表)将删除所有重复项,仅留下我们要寻找的多个出现值。