[問題] 關於對list重複append的問題

看板Python作者 (我是香民)時間3年前 (2021/09/14 23:29), 3年前編輯推噓8(805)
留言13則, 6人參與, 3年前最新討論串1/1
各位好 最近工作時需要產生一組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://www.ptt.cc/bbs/Python/M.1631633391.A.342.html

09/14 23:52, 3年前 , 1F
result要用extend
09/14 23:52, 1F

09/14 23:54, 3年前 , 2F
倒數第二行改成 result.append(series[::])
09/14 23:54, 2F

09/14 23:56, 3年前 , 3F
抱歉 2樓才是對的
09/14 23:56, 3F

09/14 23:56, 3年前 , 4F
原因是series實際上是一個reference,
09/14 23:56, 4F

09/14 23:57, 3年前 , 5F
舊的寫法會因為series一直計算更新內容,導致result
09/14 23:57, 5F

09/14 23:58, 3年前 , 6F
只會指向最後一次計算結果,也就是[2,2]
09/14 23:58, 6F
感謝各位,現在才知道原來list是指標,等於我每次append都新增同一組值

09/15 00:21, 3年前 , 7F
不要用* 用list comprehension
09/15 00:21, 7F
※ 編輯: kanako (112.104.27.82 臺灣), 09/15/2021 00:32:22

09/15 07:34, 3年前 , 8F
list還可以包含list自身就會[...]
09/15 07:34, 8F

09/16 08:41, 3年前 , 9F
* 要注意就是了,看自己對可變容器的用法需求
09/16 08:41, 9F

09/17 22:07, 3年前 , 10F
result = [[i, j] for i in range(3) for j in range
09/17 22:07, 10F

09/17 22:07, 3年前 , 11F
(3)]
09/17 22:07, 11F

09/17 22:08, 3年前 , 12F
一行收工
09/17 22:08, 12F

09/17 22:10, 3年前 , 13F
我[i ,j]寫反了,要改成[j, i]
09/17 22:10, 13F
文章代碼(AID): #1XGB_lD2 (Python)
文章代碼(AID): #1XGB_lD2 (Python)