(В этом ответе предполагается, что вы используете метод сортировки по группам в качестве упражнения.)
Сейчас хорошее время для начала практики функционального программирования подходов.
Шаг 1: используйте встроенную функцию max
и map
с функцией len
для расчета длины.
L = max(map(len, words))
Шаг 2:используйте список понимания здесь.
buckets = [[] for i in range(0, L)]
Шаг 4: ( необязательно - ваш текущий подход в порядке) вместо объединения сегментов вцикл, используйте itertools.chain
, чтобы связать их вместе.
from itertools import chain
...
newList = list(chain(*buckets))
Шаг 3: Для каждой строки s
используйте len(s) - 1
в качестве индекса сегмента (так как индексы списка Pythonначать с 0, а не с 1):
for word in words:
buckets[len(word)-1].append(word)
Соединение всего вышеперечисленного:
from itertools import chain
def bucket_sort(words):
# step 1
L = max(map(len, words))
# step 2
buckets = [[] for i in range(0, L)]
# step 3
for word in words:
buckets[len(word)-1].append(word)
# step 4
return list(chain(*buckets))
Тест:
>>> bucket_sort(["my", "name", "is", "Sherlock", "Holmes", "."])
['.', 'my', 'is', 'name', 'Holmes', 'Sherlock']