Search code examples
pythonlistsorting

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


Solution

  • 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)