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 个就跳出循环了?
1
jimmyczm 2018-04-17 19:48:51 +08:00 1
pop 是移除列表最后一个元素的方法
|
3
jadeity OP @jimmyczm 哦,我明白了,看了一下 for 的定义,计数器正好是长度了,所以跳出循环了。https://docs.python.org/3/reference/compound_stmts.html#the-for-statement
|
4
rabbbit 2018-04-17 20:02:36 +08:00
|
7
co3site 2018-04-17 20:09:49 +08:00 via Android 1
你可能需要 while True 吧
|
8
rabbbit 2018-04-17 20:14:45 +08:00 1
|
9
whoami9894 2018-04-17 20:17:11 +08:00 via Android
pop()是去掉 list 里最后一个元素,并且返回这个元素的值。六个元素循环了三次就只剩三个,所以就跳出循环了
|
10
bwangel 2018-04-17 20:17:28 +08:00
|
11
jadeity OP |
13
Kilerd 2018-04-17 20:44:08 +08:00
注意:千万不要在遍历列表的同时对列表做增删操作。
|
14
bwangel 2018-04-17 20:51:00 +08:00
@jadeity #8 的好,我的 while True 写多余了。
https://gist.github.com/bwangel23/760f71119323e1f989477a083ca28381 参考 for-iter.py 文件。 关于迭代器和 for 循环的说明参考 雨痕的 《 Python 学习笔记》 |
15
bwangel 2018-04-17 20:54:52 +08:00
另外,我在看 C++ 中的迭代器的时候,《 C++ Primer 》中说不建议在对迭代器进行迭代的时候,更改底层的被迭代的对象,因为这样很容易访问到已经被删除的对象,让程序崩溃退出。
Python 中我还没看到过哪里有说明 迭代过程中修改被迭代的对象会让程序崩溃。但是不推荐这么写,因为这样写的代码不容易理解,容易让阅读者混乱。 |
16
Ge4Los 2018-04-17 22:58:08 +08:00
不要在迭代的时候修改序列本身,会发生很多微妙的事情。增加和删除都有问题。
这点在 python 官方文档 for 语法部分有明确说明的。 |
17
shamashii 2018-04-18 10:57:46 +08:00
|
18
qianc1990 2018-04-18 11:17:27 +08:00
不要在迭代的时候修改被迭代的对象
|
19
gnozix 2018-04-18 14:28:11 +08:00
我只知道在迭代的时候修改被迭代的对象是在作死
|