I have the following code:
def radixSort(A):
#get max amount of digits
A = sortByDigit(A, maxDigits) #this works
print(A) #prints A as sorted
if __name__ == "__main__":
A = [int(100*random.random()) for i in range(10)]
radixSort(A)
print(A) #prints unsorted
Why does changing A in radixSort not change A in the main method ? I realize I could simply add a return statement in radixSort, and an assignment statement in the main method, but the code has to pass the following test case:
def testrRadixSort(self):
A = [4, 3, 2]
radixSort(A)
self.assertEqual(A, [4,3,2])
解决方案
sortByDigit isn't sorting inplace. It's creating a new list and returning a reference to that.
You can replace the contents of A with the content of the new list with this simple change
A[:] = sortByDigit(A, maxDigits) #this works
Alternatively you could modify sortByDigit so it does sort inplace