我试图在每次电流变化时附加电流以掌握电流。我使用列表失败。我已经能够修改字符串并将其他字符串附加到master上,但是如果可以使用list的话,会容易得多。
master = []
def recur(count,current):
count = count + 1
if (count == 5):
return
current.append(1)
master.append(current)
recur(count,current)
recur(0,[])
print(master)
# out put
# [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
# what I expected
# [[1], [1,1], [1,1,1], [1,1,1,1]]
答案 0 :(得分:1)
这就是您想要的:
master = []
def recur(count, current):
count += 1
if (count == 5):
return
new_current = current.copy()
new_current.append(1)
master.append(new_current)
recur(count, new_current)
recur(0, [])
print(master)
问题在于current
是对列表对象的引用,而不是实际列表本身。因此,当您将current
附加到master
时,您只是将引用附加到同一列表对象。因此,当您将新元素添加到current
列表时,该元素将添加到所有引用都指向的一个列表中。
解决方案是采用current
中的copy列表来存储当时的状态。 copy有不同类型-深浅。浅将复制列表对象,但不复制其元素,例如,如果您具有列表列表,则深复制将遍历元素和任何子元素。
答案 1 :(得分:0)
尝试下面的代码,
master = []
def recur(count, current):
count += 1
if (count == 5):
return
tmp = current[:]
tmp.append(1)
master.append(tmp)
recur(count, tmp)
recur(0, [])
master
输出
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
答案 2 :(得分:0)
原因是您要将current
列表的引用附加到master。因此,每次更改current
时,先前附加的列表也会更改。
使用此链接进行可视化:click here
>>>def recur(count,current):
count = count + 1
if (count == 5):
return
current.append(1)
master.append(current)
recur(count,current)
>>> master=[]
>>> recur(0,[])
>>> master
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> for i in master:
id(i)
2485591104264
2485591104264
2485591104264
2485591104264
>>>
您可以尝试一下。无需跟踪要附加到current
的{{1}}列表。
master
def recur(count):
count+=1
if count==5:
return
curr=[1]*count
#print(curr)
master.append(curr)
recur(count)
master=[]
recur(0)
print(master)
如果您热衷于使用[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
,请尝试一下。
可视化代码click here.
current
def recur(count,curr):
count+=1
if count==5:
return
curr.append(1)
master.append(curr)
recur(count,curr[:])
master=[]
recur(0,[])
print(master)
或者您可以尝试这个。
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
def recur(count,curr):
count+=1
if count==5:
return
curr.append(1)
master.append(curr[:])
recur(count,curr)
master=[]
recur(0,[])
print(master)
如果您想返回[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
,请尝试此操作。
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
def recur(count,curr):
count+=1
if count==5:
return []
curr.append(1)
return [curr]+recur(count,curr[:])
master=recur(0,[])
print(master)
another_master=recur(0,[])
print(another_master)