在创建 2D 时遇到问题 array/list
Having trouble in creating 2D array/list
我在创建二维排列列表时遇到困难。这是重现问题的最小代码
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
我在创建二维排列列表时遇到困难。这是重现问题的最小代码
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