我正在尝试使用基数排序按字母顺序对列表中的列表进行排序。我需要按照我创建的对象的一个属性对列表进行排序。
注意:我不能使用内置的排序 - 我必须自己编写。我不被允许使用defaultdict所以我使用了列表。
我有一个名为results []的列表。在所有结果[]的结果[x]中,我有另一个包含长度为x的单词的列表。这些单词存储为包含原始单词(originalWord),按字母顺序排列的单词(azWord)及其长度(wLength)的单词对象。例如狗,dgo,3。
由于我有很多很多单词,所以我认为基数排序对我的目的来说是最有效的。我对Python比较陌生,所以我在编写代码时遇到了一些麻烦。我粗略地概述了它应该是什么样子但我很感激帮助修复语法。
我打算在for循环中使用radix_sort,迭代结果[]。我有一个变量maxL,它存储我拥有的最长单词(也就是结果中的列表数)。
for x in range(0,maxL):
radix_sort(results[x], x)
这是我尝试为字符串编写基数排序。请注意,azWord属性表示为字符列表。
def radix_sort(List, length):
buckets = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
for i in range (0, length-1): #for every letter "column"
for word in List: #for every word
index = ord(word[i].azWord)-ord('a') #get the index of the word
buckets[index].append(word) #add word object to correct bucket
for containedList in buckets:
while(containedList):
#I'm having trouble here with emptying the lists back into the bins
编辑:另外,既然我不想用完记忆(这是为了很长的一系列单词),我应该清除一些东西,因为我不去需要?
此外,目前,Eclipse正在给我一个错误"预期::预期::"对于这一行:
for i in range (0, length-1)
当前版本:
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)
答案 0 :(得分:1)
我认为你在这些方面错过了一些冒号:
for i in range (0, length-1) # Need a colon here
for word in List # Need a colon here
for containedList[] in buckets # Need a colon here
while(containedList[]) # Need a colon here
答案 1 :(得分:1)
将排序后的结果放回列表中:
List[:] = []
for containedList in buckets:
List.extend(containedList)
还有一件事,如果你期望得到合适的排序,你需要从最不重要到最重要的排序:
for i in range(length-1, -1, -1):
请注意,您的原始范围无论如何都不正确,结束点不在此范围内,因此在length-1
处停止会跳过最后一个字母。