use*_*757 8 python loops for-loop list
我是Python新手并尝试使用Python 3.2.3(默认,2012年10月19日,20:13:42),linux2上的[GCC 4.6.3]
这是我的样本代码
>>> l=[1,2,3,4,5,6]
>>> for i in l:
... l.pop(0)
... print(l)
...
Run Code Online (Sandbox Code Playgroud)
我期待以下输出
1
[2, 3, 4, 5, 6]
2
[3, 4, 5, 6]
3
[4, 5, 6]
4
[5, 6]
5
[6]
6
[]
Run Code Online (Sandbox Code Playgroud)
相反,我得到了这个
1
[2, 3, 4, 5, 6]
2
[3, 4, 5, 6]
3
[4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
for循环在3转后停止迭代.有人可以解释一下原因吗?
小智 11
对于此任务,您可以使用while循环而不是for循环。
while len(some_list)>0 :
some_list.pop(0)
Run Code Online (Sandbox Code Playgroud)
一个for循环将列表中的每个项目,这将无法正常工作,在列表中的索引将与每个缺失改变实际迭代,你会不会最终得到的所有项目。
但是,while循环每次运行时都会检查一个条件,如果仍然为真,则再次运行代码。这里我们指定列表的长度必须大于0,即列表中必须有内容。
展开一点(插入符号(^)位于循环"索引"):
your_list = [1,2,3,4,5,6]
^
Run Code Online (Sandbox Code Playgroud)
弹出第一个项目后:
your_list = [2,3,4,5,6]
^
Run Code Online (Sandbox Code Playgroud)
现在继续循环:
your_list = [2,3,4,5,6]
^
Run Code Online (Sandbox Code Playgroud)
现在弹出第一个项目:
your_list = [3,4,5,6]
^
Run Code Online (Sandbox Code Playgroud)
现在继续循环:
your_list = [3,4,5,6]
^
Run Code Online (Sandbox Code Playgroud)
现在弹出第一项:
your_list = [4,5,6]
^
Run Code Online (Sandbox Code Playgroud)
现在继续循环 - 等等,我们完成了.:-)
>>> l = [1,2,3,4,5,6]
>>> for x in l:
... l.pop(0)
...
1
2
3
>>> print l
[4, 5, 6]
Run Code Online (Sandbox Code Playgroud)