我有以下代码:

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

为什么在 radixSort 中改变 A 不会改变 main 方法中的 A ?我意识到我可以简单地在 radixSort 中添加一个 return 语句,在 main 方法中添加一个赋值语句,但是代码必须通过以下测试用例:
    def testrRadixSort(self):
        A = [4, 3, 2]
        radixSort(A)
        self.assertEqual(A, [4,3,2])

最佳答案

sortByDigit 未就地排序。它正在创建一个新列表并返回对该列表的引用。

您可以通过这个简单的更改将 A 的内容替换为新列表的内容

A[:] = sortByDigit(A, maxDigits) #this works

或者,您可以修改 sortByDigit 以便它就地排序

关于Python如何将列表作为参数并编辑其值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19625946/

10-12 23:04