python 初学者又提问了

2014-07-17 18:01:10 +08:00
 xcc7624
lst = range(10)

for item in lst:
lst.pop(0)
print item
print lst
#结果
0
0
1
2
2
4
3
6
4
8
[5, 6, 7, 8, 9]
为什么会是这样
2933 次点击
所在节点    Python
9 条回复
O21
2014-07-17 18:04:19 +08:00
for i in range(10):
print i

这样写比较简单吧。。
puyo
2014-07-17 18:13:09 +08:00
list.pop([i])
Remove the item at the given position in the list, and return it.



懂了嘛。
xcc7624
2014-07-17 19:37:27 +08:00
@puyo为什么只迭代了五次?
puyo
2014-07-17 19:46:24 +08:00
@xcc7624 因为进入如循环后要去取lst中对应item的下标。
第一次取第0个,得到的是0
第二次取第1个,这时候就是从pop之后的列表去取了,是2
...
第五次得到的就是8,这时候lst表中只有5个数字里。
在第六次的时候,越界了。
xcc7624
2014-07-17 19:55:19 +08:00
@puyo越界了为什么没抛出异常
kqz901002
2014-07-17 20:00:02 +08:00
@puyo 这样写code有没有实际意义?或者这样写貌似会出现误解啊
kqz901002
2014-07-17 20:01:27 +08:00
@xcc7624 他说的越界的意思是 目前lst只有五个元素,五次循环结束了,就应该结束循环
puyo
2014-07-17 21:23:55 +08:00
@kqz901002 没什么意义吧,就算要间隔取数加step就好了。这样写也比较难以理解。
vellow
2014-07-17 23:17:00 +08:00
是不是这样,for循环的index+1不会每次都去查询lst具体有多长,只有遇到终点就结束,所以旧的index会应用到新的lst上?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/123176

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX