Как отсортировать список по сгусткам заданного размера?

#python-3.x #list #algorithm #sorting #logic

#python-3.x #Список #алгоритм #сортировка #Логические

Вопрос:

Я пытаюсь создать метод, который сортирует список переменных в группы четвертого размера с одинаковыми символами, сгруппированными вместе и в том же порядке, в котором они заданы. Вы можете предположить, что единственными заданными символами являются 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?

Ответ №1:

Это не самый эффективный, но вот моя попытка. Отсортируйте входные данные. Есть один dict по умолчанию, groupNums который связывает букву с текущим номером, в котором она находится. Есть другой dict по умолчанию 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