我正在嘗試按照字母順序使用基數排序對列表內的列表進行排序。我需要按照我創建的對象的屬性之一對列表進行排序。我如何按字母順序排列Python中使用基數排序的對象列表(非常長)?
注:我不能使用內置排序 - 我必須自己寫。我沒有被允許使用defaultdict,因此我使用了列表。
我有一個名爲results []的列表。在所有結果[]的結果[x]中,我有另一個包含長度爲x的單詞的列表。這些單詞存儲爲包含原始單詞(originalWord),按字母順序的單詞(azWord)及其長度(wLength)的單詞對象。例如dog,dgo,3.
由於我有很多很多的話,我決定基數排序對我的目的來說是最有效的。我對Python比較新,所以我在編寫代碼時遇到了一些麻煩。我對它應該是什麼樣子有一個粗略的概述,但我希望能幫助你解決這個問題。
我正計劃在for循環中使用radix_sort,該循環遍歷結果[]。我有一個變量maxL,它存儲了我擁有的最長的單詞(也就是結果中的列表數)。
for x in range(0,maxL):
radix_sort(results[x], x)
這是我爲字符串編寫基數排序的嘗試。請注意,azWord屬性表示爲char列表。
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)
你看過[示例實現](http://en.wikipedia.org/wiki/Radix_sort#Example_in_Python)嗎? –
是的,但我沒有發現它對我的情況特別有用,因爲我正在處理列表中的對象中的字符串。我被語法和如何獲取所有信息所拋棄。 – Michi