根据频率对列表进行排序

时间:2019-07-29 14:43:28

标签: python sorting

我有一个元素列表:

[1, 2, 3, 1, 2, 3, 1, 2, 3]

并且需要按照元素的频率对其进行排序才能得到:

[3, 3, 3, 2, 2, 2, 1, 1, 1]

如果几个元素具有相同的频率,请按降序对它们进行排序。您能找到任何方法做到这一点吗?我正在使用上述方法,但输出为:

[1, 1, 1, 2, 2, 2, 3, 3, 3]

我的代码:

from collections import Counter 

list = [1, 2, 3, 1, 2, 3, 1, 2, 3]
c = Counter(list)
x = sorted(c.most_common(), key=lambda x: (-x[1], x[0])) 
y = [([v] * n) for (v, n) in x]
z = sum(y, [])
print(z)

1 个答案:

答案 0 :(得分:1)

L = [1, 2, 3, 1, 2, 3, 1, 2, 3]

sorted_list_1 = sorted(L, lambda x: (L.count(x), -x))

c = Counter(L)
sorted_list_2 = sorted(L, lambda x: (c[x], -x))