学习 Python 遇到一个问题

2018-04-17 19:27:40 +08:00
 jadeity
for name in guest_list:
    if len(guest_list) > 2:
        print('{}'.format(len(guest_list)))
        print('Sorry {}'.format(guest_list.pop()))
6
Sorry Jobs
5
Sorry Append
4
Sorry John

这里为什么剩 3 个就跳出循环了?

3721 次点击
所在节点    Python
19 条回复
jimmyczm
2018-04-17 19:48:51 +08:00
pop 是移除列表最后一个元素的方法
jadeity
2018-04-17 19:52:21 +08:00
@jimmyczm 但是现在剩的是三个啊
jadeity
2018-04-17 20:01:02 +08:00
@jimmyczm 哦,我明白了,看了一下 for 的定义,计数器正好是长度了,所以跳出循环了。https://docs.python.org/3/reference/compound_stmts.html#the-for-statement
rabbbit
2018-04-17 20:02:36 +08:00
试了一下,没问题啊?
jadeity
2018-04-17 20:03:40 +08:00
@jimmyczm 如果我想就 pop 到剩 2 个元素应该用什么方法好呢?
jadeity
2018-04-17 20:05:40 +08:00
@rabbbit 你把元素改成 6 个试试
co3site
2018-04-17 20:09:49 +08:00
你可能需要 while True 吧
rabbbit
2018-04-17 20:14:45 +08:00
还真是哈,from 从前往后,pop 从后往前.到中间就结束了

换成 while 就好了
whoami9894
2018-04-17 20:17:11 +08:00
pop()是去掉 list 里最后一个元素,并且返回这个元素的值。六个元素循环了三次就只剩三个,所以就跳出循环了
bwangel
2018-04-17 20:17:28 +08:00
jadeity
2018-04-17 20:21:30 +08:00
@co3site
@rabbbit
换成 while 可以了,还是得看官方文档啊。书上只说了 for 会遍历每一个元素,没说有个计数器和长度做比较。
jadeity
2018-04-17 20:25:19 +08:00
@bwangel 我感觉#8 那个更简洁,我当时只想着要把每个元素打印出来用了 for 所以出错了。
Kilerd
2018-04-17 20:44:08 +08:00
注意:千万不要在遍历列表的同时对列表做增删操作。
bwangel
2018-04-17 20:51:00 +08:00
@jadeity #8 的好,我的 while True 写多余了。

https://gist.github.com/bwangel23/760f71119323e1f989477a083ca28381

参考 for-iter.py 文件。

关于迭代器和 for 循环的说明参考 雨痕的 《 Python 学习笔记》
bwangel
2018-04-17 20:54:52 +08:00
另外,我在看 C++ 中的迭代器的时候,《 C++ Primer 》中说不建议在对迭代器进行迭代的时候,更改底层的被迭代的对象,因为这样很容易访问到已经被删除的对象,让程序崩溃退出。

Python 中我还没看到过哪里有说明 迭代过程中修改被迭代的对象会让程序崩溃。但是不推荐这么写,因为这样写的代码不容易理解,容易让阅读者混乱。
Ge4Los
2018-04-17 22:58:08 +08:00
不要在迭代的时候修改序列本身,会发生很多微妙的事情。增加和删除都有问题。
这点在 python 官方文档 for 语法部分有明确说明的。
shamashii
2018-04-18 10:57:46 +08:00
qianc1990
2018-04-18 11:17:27 +08:00
不要在迭代的时候修改被迭代的对象
gnozix
2018-04-18 14:28:11 +08:00
我只知道在迭代的时候修改被迭代的对象是在作死

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

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

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

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

© 2021 V2EX