Python for-in-loop停止对从for-in-loop 创建的列表对象的迭代
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python for-in-loop停止对从for-in-loop 创建的列表对象的迭代,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2432字,纯文字阅读大概需要4分钟。
内容图文
![Python for-in-loop停止对从for-in-loop 创建的列表对象的迭代](/upload/InfoBanner/zyjiaocheng/754/57b528d6fca048c1a1992b40ddf0d40f.jpg)
参见英文答案 > Removing from a list while iterating over it 4个
[有史以来第一个Stack-o-flow Python初学者用户的问题]
我一直在尝试创建一个附加数字1到10然后在python列表对象中从10擦除到1的函数.
然而,我成功了,我遇到了for-in循环的奇怪行为.
以下是我的所作所为&成功:
def a():
li = []
for i in range(1,11):
li.append(i)
print(li)
for n in range(1,11):
li.remove(li[-1])
print(li)
a()
会打印:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
[]
但是,如果我将其for循环范围(1,11)的第二部分更改为li,则迭代将停止,如下所示.
def a():
li = []
for i in range(1,11):
li.append(i)
print(li)
for n in li: <-------------- THIS PART
li.remove(li[-1])
print(li)
a()
会打印:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]
所以,我查了一下对象li的长度.
def a():
li = []
for i in range(1,11):
li.append(i)
print(li)
print("Length before passed: ", len(li))
for n in li: <------------ THIS
print("Length BEFORE REMOVE: ", len(li))
li.remove(li[-1])
print("Length AFTER REMOVE: ", len(li))
print(li)
a()
会打印:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Length before passed: 10
Length BEFORE REMOVE: 10
Length AFTER REMOVE: 9
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Length BEFORE REMOVE: 9
Length AFTER REMOVE: 8
[1, 2, 3, 4, 5, 6, 7, 8]
Length BEFORE REMOVE: 8
Length AFTER REMOVE: 7
[1, 2, 3, 4, 5, 6, 7]
Length BEFORE REMOVE: 7
Length AFTER REMOVE: 6
[1, 2, 3, 4, 5, 6]
Length BEFORE REMOVE: 6
Length AFTER REMOVE: 5
[1, 2, 3, 4, 5] <---- And it stops here.
这里发生了什么?
为什么python for-loop会在完整循环之前停止?
非常感谢你.
解决方法:
在您的情况下,迭代会因为您从头开始迭代而停止,但您同时从末尾删除元素:
>第1次迭代以9个元素结束,因此循环进入第2个元素.
>第二次迭代以8个元素结束,因此循环前进到第3个元素
> ……
>第5次迭代以5个元素结束,没有第6个元素继续进行,循环结束.
这就是为什么在迭代它时改变列表通常是不可取的.
内容总结
以上是互联网集市为您收集整理的Python for-in-loop停止对从for-in-loop 创建的列表对象的迭代全部内容,希望文章能够帮你解决Python for-in-loop停止对从for-in-loop 创建的列表对象的迭代所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。