【发布时间】:2019-11-29 16:49:31
【问题描述】:
我正在编写一个函数来计算一个或多个数字列表的模式。
如果输入为[52, 99, 37, 86, 99, 99, 99, 37, 37, 37],则输出应为[37, 99]。正如您所看到的,应该先出现较小的数字,但我的代码不会这样做。有人可以修复我的代码吗?
def mode(L):
most = max(list(map(L.count, L)))
return list(set(filter(lambda x: L.count(x) == most, L)))
【问题讨论】:
-
但是 set 是无序的。为什么你认为结果应该是有序的?
-
您正在丢失订单。试试
list(set(["b", "a"]))看看吧。 -
使用
Counter.most_common,这样会更有效率 -
@Alex 我收到了
['b', 'a']回复。我认为顺序取决于实现。 -
万一将来有人用谷歌搜索这个,一旦 Python 3.8 出来,答案就变成了
import statistics; sorted(statistics.multimode(L))
标签: python