首页 > 解决方案 > 如何将列表排序为给定大小的块?

问题描述

我正在尝试创建一种方法,将变量列表分类为大小为 4 的块,将相同的字符组合在一起,并按照给定的顺序排列。您可以假设唯一给定的字符是 a、b 和 c。例如,这里我想对 myInitialList 进行排序。

myInitialList = ['b1', 'c1', 'b2', 'c2', 'c3', 'b3', 'c4', 'a1', 'b4', 'b5', 'a2', 'c5', 'a3', 'a4', 'a5', 'c6', 'a6', 'a7', 'a8','a9']

endList = clumpsSize4(myInitialList)

print(endList)

这应该输出结果:

['a1','a2','a3','a4','b1','b2','b3','b4','c1','c2','c3','c4','a5','a6','a7','a8','b5','c5','c6','a9']

如何编写 clumpsSize4 方法?

标签: python-3.xlistalgorithmsortinglogic

解决方案


这不是最有效的,但这是我的尝试。对输入进行排序。有一个默认字典groupNums,它将一个字母链接到它所在的当前数字块。groups有另一个包含实际团块的默认字典。最后对组进行排序,遍历它们并加入:

from collections import defaultdict

def clump(l, size=4):
    groups = defaultdict(list)
    groupNums = defaultdict(int)
    
    l = sorted(l)
    for i in l:
        letter = i[0]
        key = str(groupNums[letter]) + letter
        groups[key].append(i)
        if len(groups[key]) == size:
            groupNums[letter] += 1
    
    result = []
    for _, g in sorted(groups.items()):
            result += g
    return result

推荐阅读