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

2024-04-25 01:39:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我下面的程序确实找到了列表中最常见的元素:

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在那里被发现了三次,如上图所示),它只打印其中一个-在本例中是7。你知道吗

有没有办法改变我的代码,使输出是正确的?你知道吗


Tags: in程序元素列表forcountcounterrange
3条回答
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)
for num in range(10):
    if counter[num] == largest:
        print(num)

这里有一个解决方案,适用于任何类型的数据,而不仅仅是在一个已知的范围内的正整数。你知道吗

我们使用collections.Counter计数,提取最大计数,即最常见数字的计数,然后列出具有相同计数的数字:

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]

相关问题 更多 >