作者kanako (我是香民)
看板Python
标题[问题] 关於对list重复append的问题
时间Tue Sep 14 23:29:49 2021
各位好
最近工作时需要产生一组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错误在那边,感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.104.27.82 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1631633391.A.342.html
1F:推 s0914714: result要用extend 09/14 23:52
2F:推 cuteSquirrel: 倒数第二行改成 result.append(series[::]) 09/14 23:54
3F:推 s0914714: 抱歉 2楼才是对的 09/14 23:56
4F:→ cuteSquirrel: 原因是series实际上是一个reference, 09/14 23:56
5F:→ cuteSquirrel: 旧的写法会因为series一直计算更新内容,导致result 09/14 23:57
6F:→ cuteSquirrel: 只会指向最後一次计算结果,也就是[2,2] 09/14 23:58
感谢各位,现在才知道原来list是指标,等於我每次append都新增同一组值
7F:推 TitanEric: 不要用* 用list comprehension 09/15 00:21
※ 编辑: kanako (112.104.27.82 台湾), 09/15/2021 00:32:22
8F:推 lycantrope: list还可以包含list自身就会[...] 09/15 07:34
9F:推 poototo: * 要注意就是了,看自己对可变容器的用法需求 09/16 08:41
10F:推 garyhsu1209: result = [[i, j] for i in range(3) for j in range 09/17 22:07
11F:→ garyhsu1209: (3)] 09/17 22:07
12F:→ garyhsu1209: 一行收工 09/17 22:08
13F:推 garyhsu1209: 我[i ,j]写反了,要改成[j, i] 09/17 22:10