如何找到列表中重复次数最多的元素?

How to find most repeat elements in lists?

def print_most_numbers_occurrences(numbers_str):
    number_list = numbers_str.split() 
    for i in number_list:
        i=max(number_list,key=number_list.count)
    print(i)


def test_print_most_numbers_occurrences():
     print_most_numbers_occurrences('2 3 40 1 5 4 3 3 9  9')
     print_most_numbers_occurrences('9 30 3 9 3 1 4')
     print_most_numbers_occurrences('19 30 13 4 9 3 1 4')

def main():
    test_print_most_numbers_occurrences()


main()

输出:

3
9
4

我想得到 所有 个重复次数最多的 '9 30 3 9 3 1 4':9 和 3 出现了两次,因此不仅要报告这两次出现 9

输出如下所示:

3
9
3
4

首先:使用 max 时不需要 for 循环。它已经为您做到了。

其次:如果您想拥有多个值,那么 max 并不是一个好的选择。对于这些计数操作,您应该使用 collections.Counter(它也避免多次计算出现的次数)。

from collections import Counter

def print_most_numbers_occurrences(numbers_str):
    number_list = numbers_str.split() 
    # count the occurrences
    cnts = Counter(number_list)
    # Get the maximum count
    maximum_cnt = max(cnts.values())
    # print all values that have the "maximum" count
    print(*[val for val, cnt in cnts.items() if cnt == maximum_cnt])

并且使用您的输入进行的测试打印:

3
9 3
4

如果你更喜欢简单的循环而不是理解(或者你使用 python-2.x 而没有 print 函数)你也可以使用:

def print_most_numbers_occurrences(numbers_str):
    number_list = numbers_str.split() 
    cnts = Counter(number_list)
    maximum_cnt = max(cnts.values())
    for value, cnt in cnts.items():
        if cnt == maximum_cnt:
            print(value)

给出:

3
9
3
4
from collections import Counter

a = ('2 3 40 1 5 4 3 3 9  9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4')

for x in a:
    x = x.split()
    b = Counter(x)
    z = max(b.values())
    for k in b.keys():
        if b[k] == z:
            print(k)

输出:

3
9
3
4

如果你想要另一个输出

from collections import Counter

a = ('2 3 40 1 5 4 3 3 9  9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4')

k = []
for x in a:
    x = x.split()
    b = Counter(x)
    z = max(b.values())
    k.append([f for f in b.keys() if b[f] == z])

print(k)

输出

[['3'], ['9', '3'], ['4']]

使用函数

from collections import Counter

def maxmy(sequences):
    k = []
    for x in sequences:
        x = x.split()
        b = Counter(x)
        z = max(b.values())
        k.append([f for f in b.keys() if b[f] == z])
    return k

maxmy(('2 3 40 1 5 4 3 3 9  9','9 30 3 9 3 1 4','19 30 13 4 9 3 1 4'))

输出

[['3'], ['9', '3'], ['4']]