Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
468 views
in Technique[技术] by (71.8m points)

python - Sorting a List by frequency of occurrence in a list

I have a list of integers(or could be even strings), which I would like to sort by the frequency of occurrences in Python, for instance:

a = [1, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5]

Here the element 5 appears 4 times in the list, 4 appears 3 times. So the output sorted list would be :

result = [5, 5, 5, 5, 3, 3, 3, 4, 4, 4, 1, 1, 2]

I tried using a.count(), but it gives the number of occurrence of the element. I would like to sort it. Any idea how to do it ?

Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
from collections import Counter
print [item for items, c in Counter(a).most_common() for item in [items] * c]
# [5, 5, 5, 5, 3, 3, 3, 4, 4, 4, 1, 1, 2]

Or even better (efficient) implementation

from collections import Counter
from itertools import repeat, chain
print list(chain.from_iterable(repeat(i, c) for i,c in Counter(a).most_common()))
# [5, 5, 5, 5, 3, 3, 3, 4, 4, 4, 1, 1, 2]

Or

from collections import Counter
print sorted(a, key=Counter(a).get, reverse=True)
# [5, 5, 5, 5, 3, 3, 3, 4, 4, 4, 1, 1, 2]

If you prefer in-place sort

a.sort(key=Counter(a).get, reverse=True)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...