【发布时间】:2014-10-10 09:07:24
【问题描述】:
我有一个元素列表:[ 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]
【问题讨论】:
-
属于 codereview.stackexchance。
-
定义“更短”。 Darth Kotik 提出的答案在字符方面更短,但它不必要地为列表中的每个唯一元素执行一个额外的循环。附带说明一下,如果在具有可变元素的列表中使用给定的解决方案,则会产生问题。
标签: python algorithm sorting itertools