gpt4 book ai didi

Python pop() 与 pop(0)

转载 作者:太空狗 更新时间:2023-10-29 19:33:40 32 4
gpt4 key购买 nike

所以下面的内容让我很困惑。

#!/usr/bin/python

test = [0, 0, 0, 1, 2, 3, 4, 5, 6]
test1 = [0, 0, 0, 1, 2, 3, 4, 5, 6]

for _dummy in test:
if(_dummy == 0):
test.pop()
for _dummy in test1:
if(_dummy == 0):
test1.pop(0)

print test
print test1

结果

ubuntu-vm:~/sandbox$ ./test.py 
[0, 0, 0, 1, 2, 3]
[0, 1, 2, 3, 4, 5, 6]

也许,我从根本上误解了 pop 的实现方式。但我的理解是它删除了列表中给定索引处的项目,并将其返回。如果未指定索引,则默认为最后一项。因此,在第一个循环中,它似乎应该从列表左侧删除 3 个项目,而在第二个循环中,它应该从列表末尾删除 3 个项目。

最佳答案

第一个测试并不奇怪;最后删除了三个元素。

第二个测试有点令人惊讶。只删除了两个元素。为什么?

Python 中的列表迭代本质上由列表中的递增索引组成。当您删除一个元素时,您会将右侧的所有元素移到上方。这可能会导致索引指向不同的元素。

举例说明:

start of loop
[0,0,0,1,2,3,4,5,6]
^ <-- position of index

delete first element (since current element = 0)
[0,0,1,2,3,4,5,6]
^

next iteration
[0,0,1,2,3,4,5,6]
^

delete first element (since current element = 0)
[0,1,2,3,4,5,6]
^

从现在开始不会遇到零,因此不会删除更多元素。


为避免将来造成混淆,请尽量不要在遍历列表时修改列表。虽然 Python 不会提示(不像字典,字典在迭代期间不能修改),但它会导致像这种奇怪且通常违反直觉的情况。

关于Python pop() 与 pop(0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153511/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com