我发现了一个 python 谜题,但不知道它为何有效。
x = ['a','b','c']
for m in x:
x.remove(m)
在这个循环之后x = ['b']
。
但为什么?
据我了解for
关键字隐式为此列表创建迭代器。是.remove()
来电 __next__()
方法如此b
被跳过?我找不到任何提及它的内容,但这是我最好的猜测。
最佳答案
这里您正在迭代原始列表。在第一次迭代中,您删除了第 0 个索引元素,即 a
。现在,您的列表如下:['b','c']
。在第二次迭代中,您的 for
循环将访问索引 1
处的值,但索引 1
的值为 c
。因此,c
被删除。因此,结果列表将为['b']
。
为了使其按预期运行,请迭代列表的副本,并从原始列表中删除该项目。例如:
x = ['a','b','c']
for m in list(x): # <-- Here 'list(x)' will create the copy of list 'x'
# for will iterate over the copy
x.remove(m)
# updated value of 'x' will be: []
注意:如果不是出于演示目的,并且您使用此代码清空列表,则清空列表的有效方法是:
del x[:]
关于python - 迭代时更改列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40180296/