1

我有以下列表:

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

下面的循环遍历列表:

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

输出:

pic1
pic2

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

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

输出:

pic1
pic2
pic3
4

2 回答 2

2

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

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

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

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

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

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

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

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

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

于 2020-05-18T21:47:19.367 回答
0

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

list1.pop(n) where n=0

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

句法

**list.pop(pos)**

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

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

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


while len(list1)>0:
    nose= list1.pop()
    print(nose)
于 2020-05-18T22:32:14.897 回答