2017-09-23 73 views
0

我对列表内置函数pop很困惑。如何在python中使用内置函数pop?

该代码很简单,因为它可以。

L=[1,2] 
for i in L: 
    print i 
    L.pop(0) 

,它给

1 

我有一个较长的名单

L=[1,2,3,4,5,6] 
for i in L: 
    print i 
    L.pop(0) 

尝试过了,它给了我

1 
3 
5 

所以,回到第一个代码,我认为是从'我在L'这一行',' for循环将首先运行'1',所以它会打印我然后L.pop(0)将从L删除'1'。然后,会有另一个'L'的循环,它将打印2,使L空列表。但是,如果是第二种情况,它只返回1和1,3,5。 我在这里错过了什么?

回答

3

我在这里错过了什么?

您在这里丢失了for循环的一些基本概念。

您使用pop(0)从列表的开头处弹出。所以在弹出之后,所有元素都将一个位置左移,从而改变每个剩余元素的索引。在这种情况下,for循环的next()方法yield它保存的当前索引的新移位元素。因此你会看到这样的行为。

如果通过添加一些print声明来更改代码,它将变得更加清晰。

L=[1,2,3,4,5,6] 
for i in L: 
    print L, i 
    L.pop(0) 

# Output 
[1, 2, 3, 4, 5, 6] 1 # It has index 0 here 
[2, 3, 4, 5, 6] 3 # It has index 1 here 
[3, 4, 5, 6] 5 # It has index 2 here 
# 6 is not printed here as it has index 3 to print here but our L is reduced to [4, 5, 6] which does not contain any index 3 
0
L=[1,2] 
for i in L: 
    print i 
    L.pop(0) 

在这个例子中,你会得到输出1,因为foreach循环只运行一次。在i = 0的第一次迭代中,L [i]等于1并打印出来。当您从列表的列表长度时弹出一个产品是1。所以foreach循环后L.pop(0)语句

L=[1,2,3,4,5,6] 
for i in L: 
    print i 
    L.pop(0) 

将自动中断在这段代码中,首先考虑的迭代其中i = 0。它会打印1.然后通过弹出列表中的第一个元素列表的长度将是5.现在列表自动调整为[2,3,4,5,6]。当我等于1时,通过考虑下一次迭代,它将打印3,其中L [1] = 3。之后,弹出列表的第一个元素,导致L = [3,4,5,6]。最后打印5作为L [2]。