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