【发布时间】:2021-11-29 15:55:02
【问题描述】:
如果我已经在lista_input 中添加了一些内容,那么每当在generabinario() 方法中修改参数arr 时(例如:arr[I] = 0/1),lista_input 中的所有值也会以完全相同的方式修改方式。
发生了什么事?
这是给定程序的输出:
[[1, 1], [1, 1], [1, 1], [1, 1]]
当然输出是 [1, 1] 的序列,因为它是该方法对 arr 参数所做的最后一次修改。
这就是代码:
lista_input = []
def generabinario(n, arr, i):
if i == n:
lista_input.append(arr)
return
arr[i] = 0
generabinario(n, arr, i + 1)
arr[i] = 1
generabinario(n, arr, i + 1)
if __name__ == "__main__":
weights = []
results = []
print("Inserisci il numero di pesi da inserire")
num = int(input())
print("Inserisci i pesi")
for i in range(0, num):
weights.append(int(input()))
inputs = [None] * num
generabinario(2, inputs, 0)
print(lista_input)
【问题讨论】:
-
以防万一,将
inputs = [None] * num替换为inputs = [None for _ in range(num)]并运行代码 -
您每次都附加相同的
arr,然后再对其进行修改,因此所有引用都会更新。你的意思是:lista_input.append(arr[:])?这每次都会附加一个唯一的arr副本。 -
@quamrana Ty,这解决了我的问题!
标签: python python-3.x list recursion