学习 Python 遇到一个问题
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 个就跳出循环了?
学习 Python 遇到一个问题
pop 是移除列表最后一个元素的方法
我无法理解你的问题
但是现在剩的是三个啊
哦,我明白了,看了一下 for 的定义,计数器正好是长度了,所以跳出循环了。https://docs.python.org/3/reference/compound_stmts.html#the-for-statement
如果我想就 pop 到剩 2 个元素应该用什么方法好呢?
你把元素改成 6 个试试
你可能需要 while True 吧
pop()是去掉 list 里最后一个元素,并且返回这个元素的值。六个元素循环了三次就只剩三个,所以就跳出循环了
换成 while 可以了,还是得看官方文档啊。书上只说了 for 会遍历每一个元素,没说有个计数器和长度做比较。
我感觉#8 那个更简洁,我当时只想着要把每个元素打印出来用了 for 所以出错了。
注意:千万不要在遍历列表的同时对列表做增删操作。
#8 的好,我的 while True 写多余了。
https://gist.github.com/bwangel23/760f71119323e1f989477a083ca28381
参考 for-iter.py 文件。
关于迭代器和 for 循环的说明参考 雨痕的 《 Python 学习笔记》
另外,我在看 C++ 中的迭代器的时候,《 C++ Primer 》中说不建议在对迭代器进行迭代的时候,更改底层的被迭代的对象,因为这样很容易访问到已经被删除的对象,让程序崩溃退出。
Python 中我还没看到过哪里有说明 迭代过程中修改被迭代的对象会让程序崩溃。但是不推荐这么写,因为这样写的代码不容易理解,容易让阅读者混乱。
不要在迭代的时候修改序列本身,会发生很多微妙的事情。增加和删除都有问题。
这点在 python 官方文档 for 语法部分有明确说明的。
不要在迭代的时候修改被迭代的对象
我只知道在迭代的时候修改被迭代的对象是在作死




