gpt4 book ai didi

Python:在递归函数中使用追加 - 覆盖以前的元素

转载 作者:行者123 更新时间:2023-12-01 03:11:23 24 4
gpt4 key购买 nike

有人可以解释一下如何解决以下问题吗?我读过一些解释,但无法理解它......

非常感谢!

k = 2                  # number of possible values for each element, in this case 0 or 1
length = 3 # length of list
result = [0] * length # initialise list
results = []

# generate permutations of list
def permutations(i, k, length):
j = 0
while j < k:
result[i] = j
if i == length - 1:
print("Result: ", result)
results.append(result)
print("Results: ", results)
else:
permutations(i + 1, k, length)
j += 1

permutations(0, k, length)

在输出下方。问题是列表中所有先前的元素都被覆盖...

Result:  [0, 0, 0]
Results: [[0, 0, 0]]
Result: [0, 0, 1]
Results: [[0, 0, 1], [0, 0, 1]]
Result: [0, 1, 0]
Results: [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
Result: [0, 1, 1]
Results: [[0, 1, 1], [0, 1, 1], [0, 1, 1], [0, 1, 1]]
Result: [1, 0, 0]
Results: [[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
Result: [1, 0, 1]
Results: [[1, 0, 1], [1, 0, 1], [1, 0, 1], [1, 0, 1], [1, 0, 1], [1, 0, 1]]
Result: [1, 1, 0]
Results: [[1, 1, 0], [1, 1, 0], [1, 1, 0], [1, 1, 0], [1, 1, 0], [1, 1, 0], [1, 1, 0]]
Result: [1, 1, 1]
Results: [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]

最佳答案

您每次都附加相同的列表。通过该引用修改列表会将更改传播到列表对象所在的每个位置;这是同一个列表。

您应该附加一个浅拷贝,这样引用结果只会修改当前列表:

...
results.append(result[:])

否则,您可以在函数开头创建一个新的列表对象,以便每个递归调用都有自己的列表:

def permutations(i, k, length):
result = []
...

关于Python:在递归函数中使用追加 - 覆盖以前的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42874376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com