我写了一个python代码,解决了一个难题。它没有按预期工作。所以在调试的时候我看到了一些非常奇怪的东西。行是列表的列表。将1追加到单个row[n]
将追加到行中的所有列表!你知道吗
def trap( height):
row = []
for index, i in enumerate(height):
if i == 0 and len(row) == 0:
continue
else:
if(i > len(row)):#time for a new row
#to old rows append 0 below
for j in range(0, len(row)):
row[j].append(0)
row = row + [[0]] * (i - len(row))
else:
for j in range(0,i):
row[j].append(0)
#PROBLEMATIC CODE START
for jo in range(i,len(row)):
if(index == 1):
print("jays are",row)
print("jo is",jo, row[jo])
row[jo].append(1)
#PROBLEMATIC CODE END (I GUESS?)
print(row) #print this, it gives an idea
trap([2,0])
当我单独尝试时,效果很好,请参见:
row = [[0],[0]]
index = 1
for jo in range(0,len(row)):
if(index == 1):
print("jays are",row)
print("jo is",jo, row[jo])
row[jo].append(1)
print(row)
有问题的代码在python中被标记为注释#PROBLEMATIC CODE START
和#PROBLEMATIC CODE END
。用[2,0]
调用trap()
行变量应为[[0,1],[0,1]]
但是行变量来了[[0,1,1],[0,1,1]]
我已经干了好几个小时了!我只是不明白为什么.append()
会附加到行中的所有列表中,但当我尝试使用较小的代码时,它就可以工作了。请帮帮我,指引我
要回答这个问题,您需要稍微修改一下代码。你知道吗
您需要修改它以删除同一对象上的多个引用。你知道吗
这样,您可能会得到正确的值。你知道吗
使用
*
创建列表时,您只是复制对对象的引用,而不是复制实例本身。简短示例:我正在创建一个包含对象
["abv"]
3次的列表。都是同一个物体,只在列表中出现了3次。 一旦我编辑了一个项目,它看起来像所有的项目都更新了,但实际上它是一样的。你知道吗您需要像这样创建列表,以便为每个迭代创建一个新对象:
因此,您的代码应更改为:
相关问题 更多 >
编程相关推荐