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]
我认为这对一个人来说是一份好工作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)
如果您有多个具有相同频率的元素and如果您关心这些是否保持分组,我们可以通过更改排序键来做到这一点,不仅包括计数,还包括value:
counts = collections.Counter(lst) new_list = sorted(lst, key=lambda x: (counts[x], x), reverse=True)