我有一個元素列表:[ 3, 3, 6, 6, 6, 5, 5, 8 ]
,並且需要按元素的頻率對它進行排序以獲得此結果:[ 6, 6, 6, 3, 3, 5, 5, 8 ]
中的幾個元素具有相同的頻率按值排序。你能找到比這更短的方式嗎?在Python中,如何按元素的頻率對列表進行排序
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]
屬於codereview.stackexchance。 – 2014-10-10 09:20:10
定義'更短'。由Darth Kotik提出的答案在字符方面較短,但它不必在列表中每個唯一元素執行一個附加循環。作爲一個側面說明,值得注意的是,如果在具有可變元素的列表上使用,您給出的解決方案會產生問題。 – Dunes 2014-10-10 09:29:24