【发布时间】:2019-10-16 09:30:33
【问题描述】:
好的。我写了一个算法来展示整数列表的所有排列。但是在算法过程中,我遇到了一个问题,将一个置换列表附加到我的结果列表中。
代码是堆的算法。我在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)
决赛的结果是正确的。任何人都可以解释打印列表与使用相同变量的附加列表有何不同。
【问题讨论】:
标签: list arguments pass-by-reference python-3.5