作者chocoluv (粉圓冰)
看板Python
標題[問題] for 迴圈 迭代結果不一樣
時間Sun Mar 24 14:24:47 2019
想請問為何使用range去迭代,和不用range去迭代,輸出的結果會有所不同?
這是用range(len())去迭代的方法:
https://i.imgur.com/fJzthe3.png https://i.imgur.com/WfyE0AB.png 這是直接for i in list去迭代的結果:
https://i.imgur.com/mX7XbgV.png https://i.imgur.com/VwXCJLN.png 簡單來說就是都沒有改成integer。
另外如果以comprehension去寫:
number = [ int(i) for i in input.split()] 感覺方法和上面類似,結果卻和上面的不同
,但和第一種方式一樣有成功改成integer,想請教原因。
非常感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.242.225.21 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1553408689.A.26C.html ※ 編輯: chocoluv (27.242.225.21), 03/24/2019 14:28:56 ※ 編輯: chocoluv (27.242.225.21), 03/24/2019 14:32:03 ※ 編輯: chocoluv (27.242.225.21), 03/24/2019 14:32:52 ※ 編輯: chocoluv (27.242.225.21), 03/24/2019 14:35:13
推 TitanEric: 第二種寫法只是assign給copy而已 不會動到原本的list 03/24 15:07
→ TitanEric: 第一種寫法你轉int後又assign給list element 就會變 03/24 15:08
→ TitanEric: comprehension跟一跟二都不一樣 比較像是append新的 03/24 15:09
→ chocoluv: 感謝回覆。想再請問:第二種寫法不會動到原list,是因 03/24 15:56
→ chocoluv: 為for迴圈這樣執行時,會直接copy一個number進行迭代的 03/24 15:56
→ chocoluv: 關係嗎?所以如果要用for迴圈去修改原list內容時,只能 03/24 15:56
→ chocoluv: 用第一種方式嗎? 03/24 15:56
→ toy9986619: 不然就要直接用 map function 取得改變後的 list 03/24 17:04
推 toy9986619: 第一個用法就是用陣列偏移量去取得值與改變陣列內容 03/24 17:12
→ toy9986619: 第二個算是把陣列的值 copy 出來給該變數而已 03/24 17:12
→ toy9986619: 希望我沒有解釋錯誤 03/24 17:12
推 TitanEric: 樓上沒錯 03/24 23:26
推 iphone2003: 那個comprehension比較像這樣 03/25 10:57
→ iphone2003: number = [] 03/25 10:57
→ iphone2003: for i in input().split: 03/25 10:57
→ iphone2003: number.append(int(i)) 03/25 10:58
→ iphone2003: 看起來有一點點像第二種所以可能因此搞混了,不過它 03/25 11:00
→ iphone2003: 們其實不一樣 03/25 11:00
→ iphone2003: 不過比較方便的應該還是直接list(map(input, int))就 03/25 11:00
→ iphone2003: 好 03/25 11:00
→ TitanEric: 大推樓上 03/25 15:20
→ chocoluv: 感謝! 03/25 19:31
推 jlhc: 這應該不只是python... 建議瞭解一下變數... 03/25 20:12
→ chocoluv: 好的>< 03/25 21:37