python for 循环列表并且pop,为什么不走完?

python for 循环列表并且pop,为什么不走完?

  1. for 循环一个列表, 每次pop 都会删除最后一个值,形成新的列表,但是 pop删了几次就失效了。

a = ['a','b','c','d',1,2,3,4,5,6]

for i in a:

a.pop()

print(a,'--')

以下是结果:
/usr/local/bin/python3.7 /code/pop2.py
['a', 'b', 'c', 'd', 1, 2, 3, 4, 5] --
['a', 'b', 'c', 'd', 1, 2, 3, 4] --
['a', 'b', 'c', 'd', 1, 2, 3] --
['a', 'b', 'c', 'd', 1, 2] --
['a', 'b', 'c', 'd', 1] --

Process finished with exit code 0

想问下为什么到 ['a', 'b', 'c', 'd', 1] -- 就停止了不继续执行pop了 。


回答:

python3.7 the for statement

Note: There is a subtlety when the sequence is being modified by the loop (this can only occur for mutable sequences, e.g. lists). An internal counter is used to keep track of which item is used next, and this is incremented on each iteration. When this counter has reached the length of the sequence the loop terminates. ......

for ... in ... 内部维护了一个下标,当下标达到 list 长度之后循环就结束了。

你现在在循环内部删元素,list 长度越来越小,当删掉一半的时候,下标就超过 list 长度了。


回答:

问题出现在,你在循环内部删除元素,当i为1时,刚好把2删除。此时i已经到a尾部了,所以下次就退出了。
如果想遍历完,应该是for i in range(len(a)): a.pop()


回答:

永远记住:不要在for i in iterable 中试图修改iterable。
如果要修改,就改用for index in range(len(iterable))

以上是 python for 循环列表并且pop,为什么不走完? 的全部内容, 来源链接: utcz.com/a/163187.html

回到顶部