按频率和值对列表进行排序

Magofoco

我正在尝试解决以下问题:函数采用列表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]
pp

您可以使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章