查找列表中出现频率最高的数字

Find the most frequently occurring digit in a list

我正在尝试解决以下问题:

Compose a function that takes a list of single digits (entered at the command-line when running the program) and find the digit entered most frequently.

例如下面的命令:

$ python frequency.py 4 6 7 7 0 5 9 9 4 9 8 3 3 3 3

结果应该return3

我想我可以使用递归函数和 for 循环来解决这个问题,但我的尝试并没有提供正确的结果。

def frequency2(a):
    a[0:1] = []
    b = a
    if a == []:
        return []
    else:
        return [[a[0]] + [b.count(a[0])]] + frequency2(a[1:])

aa = sys.argv

print frequency2(aa)

我做错了什么?

可能最简单的方法是使用 collections.Counter 并简单地传入 sys.argv:

frequency.py 文件:

import collections
import sys

print(collections.Counter(sys.argv).most_common(1)[0][0])

从命令行调用时给出正确答案:

$ python frequency.py 1 2 3 4 5 6 7 8 9 1 2 3 1 2 1
1

What am I doing wrong?

您确实构建了一个值和计数列表,但您没有尝试获得它的最大值。例如,您可以在调用 frequency 函数后将 maxkey 一起使用(因为您想要最大计数)。只需将最后一行更改为:

print(max(frequency2(aa), key=lambda x: x[1])[0])

[0]是获取item-frequency子列表的实际item。