[问题] 关于对list重复append的问题

楼主: kanako (我是香民)   2021-09-14 23:29:49
各位好
最近工作时需要产生一组list,规则如下
N=0 输出空list
N=1 输出[[1]]
N=2 输出[[0,0], [1,0], [2,0], [0,1], [1,1], [2,1], [0,2], [1,2], [2,2]]
依此类推
以下是我的code(输出会缺[0,0])
N=2
series = [0] * N
result = []
while sum(series) != N*N:
for i in range(N):
if series[i] < N:
series[i] += 1
break
else:
series[i] = 0
print(series) #此处的输出都是正确的
result.append(series)
print(result) #每次append都会盖过前面的元素
结果result里面的值是
[[2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]
第一次遇到这种状况,我找不到result的值何时被重设,append也不应该盖过前面的值
请问一下各位高手,我的code错误在那边,感谢
作者: s0914714 (YA)   2021-09-14 23:52:00
result要用extend
作者: cuteSquirrel (松鼠)   2021-09-14 23:54:00
倒数第二行改成 result.append(series[::])
作者: s0914714 (YA)   2021-09-14 23:56:00
抱歉 2楼才是对的
作者: cuteSquirrel (松鼠)   2021-09-14 23:56:00
原因是series实际上是一个reference,旧的写法会因为series一直计算更新内容,导致result只会指向最后一次计算结果,也就是[2,2]
作者: TitanEric (泰坦)   2021-09-15 00:21:00
不要用* 用list comprehension
作者: lycantrope (阿宽)   2021-09-15 07:34:00
list还可以包含list自身就会[...]
作者: poototo (poototo)   2021-09-16 08:41:00
* 要注意就是了,看自己对可变容器的用法需求
作者: garyhsu1209 (良师)   2021-09-17 22:07:00
result = [[i, j] for i in range(3) for j in range(3)]一行收工我[i ,j]写反了,要改成[j, i]

Links booklink

Contact Us: admin [ a t ] ucptt.com