use*_*835 13 python indexing list frequency
有没有办法(在python中),我可以按频率对列表进行排序?
例如,
[1,2,3,4,3,3,3,6,7,1,1,9,3,2]
Run Code Online (Sandbox Code Playgroud)
上面的列表将按其值的频率顺序排序,以创建以下列表,其中频率最高的项目位于前面:
[3,3,3,3,3,1,1,1,2,2,4,6,7,9]
Run Code Online (Sandbox Code Playgroud)
mgi*_*son 27
我认为这对于collections.Counter:
counts = collections.Counter(lst)
new_list = sorted(lst, key=lambda x: -counts[x])
Run Code Online (Sandbox Code Playgroud)
或者,您可以编写没有lambda的第二行:
counts = collections.Counter(lst)
new_list = sorted(lst, key=counts.get, reverse=True)
Run Code Online (Sandbox Code Playgroud)
如果您有多个具有相同频率的元素并且您关心那些仍然分组,我们可以通过更改排序键来不仅包括计数,还包括值:
counts = collections.Counter(lst)
new_list = sorted(lst, key=lambda x: (counts[x], x), reverse=True)
Run Code Online (Sandbox Code Playgroud)
l = [1,2,3,4,3,3,3,6,7,1,1,9,3,2]
print sorted(l,key=l.count,reverse=True)
[3, 3, 3, 3, 3, 1, 1, 1, 2, 2, 4, 6, 7, 9]
Run Code Online (Sandbox Code Playgroud)