[問題] for 迴圈 迭代結果不一樣

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

Links booklink

Contact Us: admin [ a t ] ucptt.com