如何在列表中找到几个最常见的元素

时间:2019-12-01 18:17:32

标签: python list

下面的我的程序确实在列表中找到了最频繁的元素:

numbers = [7, 1, 7, 9, 2, 9, 7, 3, 0]
counter = []

for num in range(10):
    n = numbers.count(num)
    counter.append(n)

largest = max(counter)
print(counter.index(largest))

输出为7,这是正确的。

但是,如果我在列表中再添加9个:

numbers = [7, 1, 7, 9, 2, 9, 7, 3, 0, 9]

这意味着列表中有两个最频繁的元素(在这种情况下,7和9都在该位置被发现了3次,如上所示),它只打印其中一个-在这种情况下为7。

有什么办法可以更改我的代码,以便输出正确吗?

5 个答案:

答案 0 :(得分:4)

这是一种适用于任何类型数据的解决方案,不仅适用于预先已知范围内的正整数。

我们使用collections.Counter进行计数,提取最大计数(即most_common数的计数),然后列出具有相同计数的数字的列表:

from collections import Counter

numbers = [7, 1, 7, 9, 2, 9, 7, 3, 0, 9]
counts = Counter(numbers)
max_count = counts.most_common(1)[0][1]
out = [value for value, count in counts.most_common() if count == max_count]
print(out)
# [7, 9]

答案 1 :(得分:1)

for num in range(10):
    if counter[num] == largest:
        print(num)

答案 2 :(得分:0)

from itertools import groupby

numbers = [7, 1, 7, 9, 2, 9, 7, 3, 0, 9]

counts = [(i, len(list(c))) for i,c in groupby(numbers)]    
print(counts)

答案 3 :(得分:0)

由于列表counter的索引反映了排序的值列表,因此一种简单的解决方案是采用最高的索引:len(counter) - 1 - counter[::-1].index(largest)

答案 4 :(得分:0)

这是我的方式:

numbers = [7, 1, 7, 9, 2, 9, 7, 3, 0, 9]
counter = set([x for x in numbers if numbers.count(x) > 1])
print(max(counter))
# 9