我试图在每次电流变化时附加电流以掌握电流。我使用列表失败。我已经能够修改字符串并将其他字符串附加到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]]
这是您想要的:
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
列表时,它会添加到所有引用都指向的一个列表中。
解决方案是采用copy列表中的current
来存储当时的状态。 copy有不同类型-深浅。浅层将复制列表对象,但不会复制其元素,例如,如果您具有列表列表,则深层复制将遍历元素和任何子元素。
原因是您要将current
列表的引用附加到主文件。因此,每次更改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
的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]]
如果您热衷于使用current
,请尝试此操作。此代码click here.的可视化>
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]]
方法3
或者您可以尝试一下。
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]]
方法4
如果要返回[[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)
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]] [[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
尝试下面的代码,