我有一个元素列表:[ 3, 3, 6, 6, 6, 5, 5, 8 ]
,需要按元素频率排序以得到以下结果:[ 6, 6, 6, 3, 3, 5, 5, 8 ]
。如果有多个元素具有相同的频率,则按值对它们进行排序。你能找到比这更短的方法吗?
import collections
from operator import itemgetter, attrgetter
def freq_sort(arr):
counter=collections.Counter(arr)
com = sorted(counter.most_common(), key=itemgetter(1,0), reverse=True)
com = map(lambda x: [x[0]] * x[1], com)
return [item for sublist in com for item in sublist]