gpt4 book ai didi

python - 我如何在 Python 中使用基数排序按字母顺序对(很长的)对象列表进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:47 32 4
gpt4 key购买 nike

我正在尝试使用基数排序按字母顺序对列表中的列表进行排序。我需要列表按我创建的对象的属性之一进行排序。

注意:我不能使用内置排序——我必须自己编写。我不允许使用 defaultdict,所以我使用了列表。

我有一个名为 results[] 的列表。在所有结果 [] 的结果 [x] 中,我有另一个包含长度为 x 的单词的列表。这些单词存储为包含原始单词 (originalWord)、按字母顺序排列的单词 (azWord) 及其长度 (wLength) 的单词对象。例如狗,dgo,3。

因为我有很多很多词,所以我决定基数排序对我的目的来说是最有效的。我对 Python 比较陌生,所以在正确编写代码时遇到了一些问题。我对它应该是什么样子有一个粗略的概述,但如果能帮助我修复语法,我将不胜感激。

我计划在遍历 results[] 的 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 给我这一行的错误“Expected::Expected::”:

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)

最佳答案

将排序后的结果放回列表中:

List[:] = []
for containedList in buckets:
List.extend(containedList)

还有一件事,如果您希望正确排序,则需要从最不重要到最重要进行排序:

for i in range(length-1, -1, -1):

请注意,您的原始范围无论如何都不正确,终点不包含在范围内,因此在 length-1 处停止会跳过最后一个字母。

关于python - 我如何在 Python 中使用基数排序按字母顺序对(很长的)对象列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841888/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com