Примечание. Я использую Python 3.
Я пытаюсь отсортировать список слов в алфавитном порядке.
Это мой сорт:
def radix_sort(List, length):
buckets = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
for i in range (length-1, -1, -1): #for every letter "column"
for word in List: #for every word
index = ord(word.azWord[i])-ord('a') #get the index of the word
buckets[index].append(word) #add word object to correct bucket
List[:] = []
for containedList in buckets:
List.extend(containedList)
Он используется в этом цикле:
for x in range(0,maxL):
radix_sort(results[x], x)
maxL — это длина самых длинных слов, которые у меня есть, поэтому итерация от 0 до maxL проходит через весь список.
Мои результаты списка [] - это список списков. Каждый список в результатах содержит словесный объект, описанный следующим образом:
class word(object): #object class
def __init__(self, originalWord=None, azWord=None, wLength=None):
self.originalWord = originalWord
self.azWord = azWord
self.wLength = wLength
Например, results[3] должен содержать список всех слов с wLength равным 3.
Когда я подаю всю свою программу на следующий ввод:
hello
world
alphabetical
dog
cat
potato
stack
С помощью этого фрагмента кода:
for row in results:
for item in row:
print(item.originalWord)
Он печатает:
cat
cat
dog
dog
dog
cat
stack
stack
world
hello
hello
stack
hello
hello
world
hello
world
world
stack
stack
world
potato
potato
potato
potato
potato
potato
alphabetical
Я почти уверен, что правильно перебираю результаты [] при печати. Почему мой radix_sort не дает мне правильных результатов? Я пытался использовать отладчик, но не повезло.
РЕДАКТИРОВАТЬ: я изменил свой код следующим образом:
def radix_sort(List, length):
for i in range (length-1, -1, -1):
for word in List:
buckets = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
index = ord(word.azWord[i])-ord('a')
buckets[index].append(word)
List[:] = []
for containedList in buckets:
List.extend(containedList)
return List #returns an alphabetized list
Теперь это дает мне ошибку здесь:
for containedList in buckets:
Он говорит: «UnboundLocalError: ссылка на локальную переменную« сегменты »перед назначением». Что это значит?
buckets[index].append(word)
вы добавляете каждое словоlength
раз в ведро. - person njzk2   schedule 03.04.2014buckets
внутри первого цикла, а также реконструкциюList
. - person njzk2   schedule 03.04.2014List[:] = []
в циклfor word in List
. Есть ли причина, по которой я должен переместитьbuckets
, которого мне не хватает? - person Michi   schedule 03.04.2014