不,你不能那样改变A
。请记住,A
您的radixSort
功能(本地范围)与A
您的主要功能(全局范围)不同。
为了实现您的需要,您可以将其声明为全局变量。但是,这不是最好的方法,因为使用全局变量会使您遇到令人困惑的范围问题,因此不建议这样做。但这是如何做到的:
def radixSort(lst): #we can refer to the passed variable as lst
global A
这不会对 A 进行就地排序,而是将排序分配lst
给A
.
A
或者更好的是,使用切片表示法将排序值分配给:
A[:] = sortByDigit(A, maxDigits) #store the sorted list in A
或者更好的是,将其按排序返回,然后A
使用排序后的值重新分配:
def radixSort(A):
#get max amount of digits
A = sortByDigit(A, maxDigits) #this works
print(A) #prints A as sorted
return A
在你的主程序中:
if __name__ == "__main__":
A = [int(100*random.random()) for i in range(10)]
A = radixSort(A)
print(A) #prints sorted
self.assertEqual(A, [4,3,2]) #self.assertEqual(sorted, unsorted)
此外,将标识符大写并不是一个好习惯。大写的单词通常是为类保留的。
所以:
def radixSort(a):
#get max amount of digits
a = sortByDigit(a, maxDigits) #this works
print(a) #prints A as sorted
return a
if __name__ == "__main__":
a = [int(100*random.random()) for i in range(10)]
a = radixSort(a)
print(a) #prints sorted
self.assertEqual(A, [4,3,2]) #self.assertEqual(sorted, unsorted)
希望这可以帮助!