查找列表中出现频率最高的数字
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
函数后将 max
与 key
一起使用(因为您想要最大计数)。只需将最后一行更改为:
print(max(frequency2(aa), key=lambda x: x[1])[0])
[0]
是获取item-frequency子列表的实际item。
我正在尝试解决以下问题:
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
函数后将 max
与 key
一起使用(因为您想要最大计数)。只需将最后一行更改为:
print(max(frequency2(aa), key=lambda x: x[1])[0])
[0]
是获取item-frequency子列表的实际item。