Pop in:Pythonpop()vspop(0)

所以以下是困惑我。

#!/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 个项目。

25

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

第二次测试有点意外,只去掉了两个元素,为什么?

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 不会抱怨(不像字典,在迭代过程中不能修改),但它会导致像这样奇怪且通常违反直觉的情况。

9

因为在列表中或堆栈在后进先出 [LIFO] 中工作,所以使用pop()它删除列表中的最后一个元素

其中 aspop(0)表示它删除索引中的元素,该元素是列表的第一个元素

根据文档

list.pop([i]):
Remove the item at the given position in the list,and return it.If no index is specified,a.pop() removes and returns the last item in the list.(The square brackets around the i in the method signature denote that the parameter is optional,not that you should type square brackets at that position.You will see this notation frequently in the Python Library Reference.)
6

如果您查看第一个元素,删除它,然后继续查看第二个元素,那么您就错过了一个元素。

最初位于第二位的元素从未被检查过,因为它在迭代过程中“改变了位置”。

0

当您在 python 中使用 'for item in ITEMS:' 命令时;您仍然按索引迭代,item 仍然隐式设置为item = ITEMS[index]。每个 pop(0)将项目向左移动,下一个item被引用为item = ITEMS[index++],因此,test1 中的第三个零永远不会被循环处理。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(764)
Honor 8 c:为什么bash不会在文件路径中转义空格或荣誉引号
上一篇
无条件呼叫转移:呼叫转移(droid call forwarding)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(52条)