python - 在创建二维数组/列表时遇到问题

标签 python arrays list shallow-copy

我在创建二维排列列表时遇到困难。这是重现问题的最小代码

class Solution:
def permute(self, A):
    A = sorted(A)
    print A
    A_out = []
    A_out.append(A)
    for iter0 in range(4):
        A[0] = A[0] + 1
        print A
        A_out.append(A)
    return A_out

sol = Solution()
A = [1, 2, 3]
print sol.permute(A)

对于这个特定的输入(1、2、3),输出是

[1, 2, 3]
[2, 2, 3]
[3, 2, 3]
[4, 2, 3]
[5, 2, 3]
[[5, 2, 3], [5, 2, 3], [5, 2, 3], [5, 2, 3], [5, 2, 3]]

但期望的输出是

[1, 2, 3]
[2, 2, 3]
[3, 2, 3]
[4, 2, 3]
[5, 2, 3]
[[1, 2, 3], [2, 2, 3], [3, 2, 3], [4, 2, 3], [5, 2, 3]]

我认为它与深拷贝/浅拷贝有关,但我不确定如何纠正这个问题,因为我对 Python 不是很熟悉。我该如何解决?

最佳答案

确实是关于浅拷贝的。您不断附加的列表 A 始终引用相同的值。这与 Python 中列表的可变性有关。

每次都需要追加一个新的列表副本,使它们相互独立。您可以使用切片运算符 [:] 来做到这一点,因为它会创建列表的新副本。所以你可以在调用 append

时使用它
def permute(self, A):
    A = sorted(A)
    print A
    A_out = []
    A_out.append(A[:])
    while (self.checkVal(A) != -1) :
        A = self.nextState(A,self.checkVal(A))
        print A
        A_out.append(A[:])
    return A_out

关于python - 在创建二维数组/列表时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32071724/

相关文章:

python - 调整 cv2.VideoCapture 的帧大小

python - 从数组的下 n 个元素高效地创建数组

javascript - ngFor 与 JSON 对象 - Angular 2 ngmodel 视角

android - 如何获取我点击的列表项数据?

python - Python中列表列表中的列表中的值的平均值

python - 表示从有限集到有限集的函数集

python - 从 Python 的输入流加载图像

Java - 查找连续元素的最长递增序列的程序(逻辑错误)

javascript - JavaScript 中数组的最大值

python - 如何合并列表列表中的两个元素?