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]
我认为这对于A来说将是一项好工作collections.Counter:
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)