作者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/m.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