作者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://webptt.com/m.aspx?n=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
1F:推 TitanEric: 第二種寫法只是assign給copy而已 不會動到原本的list 03/24 15:07
2F:→ TitanEric: 第一種寫法你轉int後又assign給list element 就會變 03/24 15:08
3F:→ TitanEric: comprehension跟一跟二都不一樣 比較像是append新的 03/24 15:09
4F:→ chocoluv: 感謝回覆。想再請問:第二種寫法不會動到原list,是因 03/24 15:56
5F:→ chocoluv: 為for迴圈這樣執行時,會直接copy一個number進行迭代的 03/24 15:56
6F:→ chocoluv: 關係嗎?所以如果要用for迴圈去修改原list內容時,只能 03/24 15:56
7F:→ chocoluv: 用第一種方式嗎? 03/24 15:56
8F:→ toy9986619: 不然就要直接用 map function 取得改變後的 list 03/24 17:04
9F:推 toy9986619: 第一個用法就是用陣列偏移量去取得值與改變陣列內容 03/24 17:12
10F:→ toy9986619: 第二個算是把陣列的值 copy 出來給該變數而已 03/24 17:12
11F:→ toy9986619: 希望我沒有解釋錯誤 03/24 17:12
12F:推 TitanEric: 樓上沒錯 03/24 23:26
13F:推 iphone2003: 那個comprehension比較像這樣 03/25 10:57
14F:→ iphone2003: number = [] 03/25 10:57
15F:→ iphone2003: for i in input().split: 03/25 10:57
16F:→ iphone2003: number.append(int(i)) 03/25 10:58
17F:→ iphone2003: 看起來有一點點像第二種所以可能因此搞混了,不過它 03/25 11:00
18F:→ iphone2003: 們其實不一樣 03/25 11:00
19F:→ iphone2003: 不過比較方便的應該還是直接list(map(input, int))就 03/25 11:00
20F:→ iphone2003: 好 03/25 11:00
21F:→ TitanEric: 大推樓上 03/25 15:20
22F:→ chocoluv: 感謝! 03/25 19:31
23F:推 jlhc: 這應該不只是python... 建議瞭解一下變數... 03/25 20:12
24F:→ chocoluv: 好的>< 03/25 21:37