2013-04-16 55 views
0

這是我現在的代碼。我試圖將基數排序應用於從文件中讀取的數字列表,並將排序後的列表寫入不同的文件。什麼導致「不支持的操作數類型爲//:'list'和'int'」?

from math import log 

b = open("radix.in.txt").readlines() 
a = [int(i) for i in b] 

f = open("radix.out.txt", "w") 
def getIndex(num, base, digit_num): 
    return (num // base ** digit_num) % base 

def newLists(size): 
    return [ [] for i in range(size) ] 

def order(a, base, digit_num): 
    placehold = newLists(base) 
    for num in a: 
     placehold[getIndex(num, base, digit_num)].append(num) 
    return placehold 

def radixSort(a, base): 
    passes = 3 
    new_list = a 
    for digit_num in range(passes): 
     new_list = order(new_list, base, digit_num) 
    list_c = [str(i) for i in new_list] 
    print list_c 

radixSort(a, 10) 

輸入文件只是一個所有的數字列表與一個數字進行排序,每行

回溯:

File "C:\Users\Nolan Caldwell\Desktop\HW5.py", line 23, in radixSort new_list = order(new_list, base, digit_num) 
File "C:\Users\Nolan Caldwell\Desktop\HW5.py", line 16, in order placehold[getIndex(num, base, digit_num)].append(num) 
File "C:\Users\Nolan Caldwell\Desktop\HW5.py", line 8, in getIndex return (num // base ** digit_num) % base 
TypeError: unsupported operand type(s) for //: 'list' and 'int' 
+0

您的追溯請?請輸入你的輸入文件? –

+0

'return(num // base ** digit_num)%base'這一行,因爲num是一個列表,而python不知道如何執行''//帶列表' – 2013-04-16 05:14:45

+0

回溯: 文件「C:\ Users \ Nolan Caldwell \ Desktop \ HW5.py「,第23行,以radixSort new_list = order(new_list,base,digit_num) 文件」C:\ Users \ Nolan Caldwell \ Desktop \ HW5.py「,第16行,按順序 placehold [getIndex(num,base,digit_num)]。append(num) getIndex中的第8行文件「C:\ Users \ Nolan Caldwell \ Desktop \ HW5.py」return(num // base ** digit_num )%base TypeError:不受支持的操作數類型爲//:'list'和'int' 輸入文件只是一個要用一個數字排序的所有數字的列表在每行上 –

回答

4

你的功能order()預計整數作爲一個列表第一個參數a,這就是第一次迭代的結果。

但是,order()返回列表的列表,並且在radixSort()的第二次迭代中傳遞新列表而不是a,這就是爲什麼它失敗。

+0

謝謝,這有助於解決問題。我還必須將「尺寸」更改爲「基礎」。 –

相關問題