#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