我正在尝试解决以下问题:
撰写一个采用单个数字列表的函数(输入为 运行程序时的命令行)并找到最常输入的数字。
例如,以下命令:
$ 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)
我做错了什么?
答案 0 :(得分:3)
可能最简单的方法是使用collections.Counter
并简单地传入sys.argv
:
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
函数后使用key
和frequency
(因为您需要最大计数)。只需将最后一行更改为:
print(max(frequency2(aa), key=lambda x: x[1])[0])
[0]
是获取项目频率子列表的实际项目。