Python list 在同一范围内为同一变量追加不同的列表
Python list append different lists in the same scope for the same variable
好的。我编写了一个算法来显示整数列表的所有排列。但是在算法过程中,我在将置换列表附加到结果列表时遇到了问题。
代码是堆的算法。我在 size == 1
时完成了排列。因此,可以将置换列表 V
附加到我的最终列表 res
。这是代码:
排列列表的函数
def permutations(V, size):
global res
if size == 1:
print(V)
res.append(V)
for i in range(0, size):
permutations(V, size-1)
if size % 2 == 1:
V[size-1], V[0] = V[0], V[size-1]
else:
V[i], V[size-1] = V[size-1], V[i]
A = [1,2,3]
res = []
permutation(A, len(A))
print(res)
这是输出:
[1, 2, 3]
[2, 1, 3]
[3, 1, 2]
[1, 3, 2]
[2, 3, 1]
[3, 2, 1]
res: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
V 的打印排列都是正确的。但是列表 V 附加到我的 global res
没有改变。它们在打印后立即追加,列表追加不同。
如果像这样更改行:
res.append(V)
|
|
v
D = [V[i] for i in range(len(V))]
res.append(D)
决赛的结果是正确的。任何人都可以解释打印列表与使用相同变量的附加列表有何不同。
将 res.append(V)
替换为 res.append(list(V))
即可解决您的问题。
您附加到 res 的所有 V
都是对同一对象的引用。这可以通过打印列表中每个元素的 id 来观察:
for i in res:
print(id(i))
好的。我编写了一个算法来显示整数列表的所有排列。但是在算法过程中,我在将置换列表附加到结果列表时遇到了问题。
代码是堆的算法。我在 size == 1
时完成了排列。因此,可以将置换列表 V
附加到我的最终列表 res
。这是代码:
排列列表的函数
def permutations(V, size):
global res
if size == 1:
print(V)
res.append(V)
for i in range(0, size):
permutations(V, size-1)
if size % 2 == 1:
V[size-1], V[0] = V[0], V[size-1]
else:
V[i], V[size-1] = V[size-1], V[i]
A = [1,2,3]
res = []
permutation(A, len(A))
print(res)
这是输出:
[1, 2, 3]
[2, 1, 3]
[3, 1, 2]
[1, 3, 2]
[2, 3, 1]
[3, 2, 1]
res: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
V 的打印排列都是正确的。但是列表 V 附加到我的 global res
没有改变。它们在打印后立即追加,列表追加不同。
如果像这样更改行:
res.append(V)
|
|
v
D = [V[i] for i in range(len(V))]
res.append(D)
决赛的结果是正确的。任何人都可以解释打印列表与使用相同变量的附加列表有何不同。
将 res.append(V)
替换为 res.append(list(V))
即可解决您的问题。
您附加到 res 的所有 V
都是对同一对象的引用。这可以通过打印列表中每个元素的 id 来观察:
for i in res:
print(id(i))