for 循环时候 pop现象
Posted 666sss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for 循环时候 pop现象相关的知识,希望对你有一定的参考价值。
a = [‘a‘,‘b‘,‘c‘,‘d‘,1, 2, 3, 4,5,6,7,8] for index, x in enumerate(a): print("索引是{},列表的长度是{},删除的值是{}".format(index, len(a),a[-1])) a.pop() print(a) print("=" * 20) print(‘~~~~~‘) a2 = [‘a‘,‘b‘,‘c‘,‘d‘,1, 2, 3, 4,5,6,7,8] for i in a2: a2.pop() print(a2)
`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
/usr/local/bin/python3.7 /code/pop2.py
索引是0,列表的长度是12,删除的值是8
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4, 5, 6, 7]
====================
索引是1,列表的长度是11,删除的值是7
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4, 5, 6]
====================
索引是2,列表的长度是10,删除的值是6
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4, 5]
====================
索引是3,列表的长度是9,删除的值是5
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4]
====================
索引是4,列表的长度是8,删除的值是4
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3]
====================
索引是5,列表的长度是7,删除的值是3
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2]
====================
~~~~~
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4, 5, 6, 7]
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4, 5, 6]
[‘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]
Process finished with exit code 0
分析下为什么,pop 最后的结果不是 [] ,而是到[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2] 就停止了.
可以看一下第一段代码. 每次迭代的时候,索引值都是在累加. 当索引是5的时候, pop已经删到[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2] 还剩6个.,这6个值的下标是 0,1,2,3,4,5
假设 索引是6 , 那么list里面的值就需要7个. 但是 结果并没有7个值在里面. 所以就暂停了.
所以,如果继续累加索引的话, 索引是6,值[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1,] 这些值的索引是 0,1,2,3,4 但是这又只有5个值,索引只到4, 所以不存在索引6, 就只有暂停了.
================= 同理===================
a = [1, 2, 3, 4] for index, x in enumerate(a): print("索引是{},去删除的值是{},列表的长度是{}".format(index, x, len(a))) a.remove(x) print("=" * 20) print(a)
结果如下:
索引是0,去删除的值是1,列表的长度是4
====================
索引是1,去删除的值是3,列表的长度是3
====================
[2, 4]
如果索引是2 , 但是 这个上面的[2,4] ,索引只到1,是 0,1 .也不存在索引2,所以,只剩下2和4的结果.
注意:
列表的长度在变化,索引值也在变化。这个是容易忽视的一个点,原因是for循环的对象是一个可迭代的对象。
所以,如果以上列表,循环到[] .可以用下面的方法解决.
a2 = [‘a‘,‘b‘,‘c‘,‘d‘,1,2,3,4,5,6,7,8] print(len(a2)) for i in range(len(a2)): # del a2[0] 这个方法也可以,下面的pop也可以 a2.pop() print(a2)
/usr/local/bin/python3.7 /code/pop2.py
12
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4, 5, 6, 7]
[‘a‘, ‘b‘, ‘c‘, ‘d‘, 1, 2, 3, 4, 5, 6]
[‘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]
[‘a‘, ‘b‘, ‘c‘, ‘d‘]
[‘a‘, ‘b‘, ‘c‘]
[‘a‘, ‘b‘]
[‘a‘]
[]
Process finished with exit code 0
以上是关于for 循环时候 pop现象的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围
在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始