查找列表中最常出现的数字

时间:2017-04-28 14:10:29

标签: python counting

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

  

撰写一个采用单个数字列表的函数(输入为   运行程序时的命令行)并找到最常输入的数字。

例如,以下命令:

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

结果应该返回3

我想我可以使用递归函数和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)

我做错了什么?

1 个答案:

答案 0 :(得分:3)

可能最简单的方法是使用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
  

我做错了什么?

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

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

[0]是获取项目频率子列表的实际项目。