我正在尝试解决以下问题:函数采用列表A。结果必须是列表的有序列表。每个列表包含原始列表A中具有相同频率的元素。
例:
Input: [3, 1, 2, 2, 4]
Output: [[1, 3, 4], [2, 2]]
我设法对初始列表A进行排序,并确定元素的频率。但是,我不知道如何根据频率分割原始列表A。
我的代码:
def customSort(arr):
counter = Counter(arr)
y = sorted(arr, key=lambda x: (counter[x], x))
print(y)
x = Counter(arr)
a = sorted(x.values())
print()
customSort([3,1,2,2,4])
我当前的输出:
[1, 3, 4, 2, 2]
[1, 1, 1, 2]
您可以使用defaultdict
列表中的一个并迭代您的Counter
:
from collections import defaultdict, Counter
def customSort(arr):
counter = Counter(arr)
dd = defaultdict(list)
for value, count in counter.items():
dd[count].extend([value]*count)
return dd
res = customSort([3,1,2,2,4])
# defaultdict(list, {1: [3, 1, 4], 2: [2, 2]})
这提供了附加信息,即,键表示可以看到列表中的值多少次。如果需要列表列表,则可以简单地访问值:
res = list(res.values())
# [[3, 1, 4], [2, 2]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句