一尘不染

按频率排序列表

python

Python中有什么方法可以按频率对列表进行排序?

例如,

[1,2,3,4,3,3,3,6,7,1,1,9,3,2]

上面的列表将按照其值的频率顺序进行排序,以创建以下列表,其中频率最高的项目位于最前面:

[3,3,3,3,3,1,1,1,2,2,4,6,7,9]

阅读 163

收藏
2020-12-20

共1个答案

一尘不染

我认为这对于A来说将是一项好工作collections.Counter

counts = collections.Counter(lst)
new_list = sorted(lst, key=lambda x: -counts[x])

或者,您可以写第二行而不使用lambda:

counts = collections.Counter(lst)
new_list = sorted(lst, key=counts.get, reverse=True)

如果您有多个具有相同频率的元素 并且 您希望这些元素保持分组状态,那么我们可以通过更改排序键以不仅包括计数,还包括 来做到这一点:

counts = collections.Counter(lst)
new_list = sorted(lst, key=lambda x: (counts[x], x), reverse=True)
2020-12-20