繁体   English   中英

为什么 for 循环的行为与“pop” function 的 while 循环不同?

[英]Why does the for loop behave differently than the while loop for the “pop” function?

我有以下列表:

list1=['pic1','pic2', 'pic3']

下面的循环遍历列表:

n=0
for item in list1:
    nose= list1.pop(n)
    print(nose)

Output:

pic1
pic2

为什么列表中的最后一项没有在 for 循环中打印,但 while 循环打印所有三个项:

n=0
while len(list1)>0:
    nose= list1.pop(n)
    print(nose)

Output:

pic1
pic2
pic3

您可以测试第一个程序以查看它对 print 语句的作用:

list1=['pic1','pic2', 'pic3']
    n=0
    for item in list1:
        nose= list1.pop(n)
        print(f'{list1}, item={item}, popped={nose}')

第一次通过循环, item包含pic1 ,索引 0 处的值,它弹出并打印它:

['pic2', 'pic3'], item=pic1, popped=pic1

第二次通过循环,它打印:

['pic3'], item=pic3, popped=pic2

也就是说,它将循环的索引移动到 position 1,现在是pic3 ,因为您已经在上一次迭代中从列表中弹出了一个条目。 它从列表中弹出pic2

现在循环结束了。 下一项的索引超出了列表的末尾,因此它停止了。

正如评论中所说,基本规则是永远不要修改您正在迭代的列表,因为它可能会产生复杂且意外的(对开发人员而言)结果。

我观察到在下面的代码中,您总是为pop()方法传递索引 0。

list1.pop(n) where n=0

如果您不将 index 传递给pop()那么它将删除列表中的最后一个元素。

句法

**list.pop(pos)**

pos =>可选。 一个数字,指定要删除的元素的 position,默认值为 -1,返回最后一项

在 while 循环中,由于您将0索引传递给pop()方法,因此它将始终删除0索引处的项目,并且列表的长度为 3,因此它将打印所有三个项目。

for item in list1:
    nose= list1.pop()
    print(nose)


while len(list1)>0:
    nose= list1.pop()
    print(nose)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM