【发布时间】:2011-09-23 23:02:17
【问题描述】:
以下代码:
a = list(range(10))
remove = False
for b in a:
if remove:
a.remove(b)
remove = not remove
print(a)
使用 Python 3.2 时输出 [0, 2, 3, 5, 6, 8, 9],而不是 [0, 2, 4, 6, 8]。
- 为什么会输出这些特定的值?
- 为什么没有错误提示底层迭代器正在被修改?
- 在此行为方面,Python 早期版本的机制是否发生了变化?
请注意,我并不是要解决这种行为,而是要理解它。
【问题讨论】:
-
如果你只想要非奇数索引,你可以只做
list[::2],同样l[1::2]非偶数。几乎所有您想在迭代列表时从列表中删除的操作,您的设计都是错误的。