python - 迭代时更改列表

标签 python

我发现了一个 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/

相关文章:

python - 如何安装 six.moves.xmlrpc_client?

Python:获取属性

python - 通过 OID 转换为类型?

python - 如何在 PyCharm 中重新初始化 Python 控制台?

Python 3.3 序列 key 生成器列表问题

python - 追加/格式化字符串

python - python join函数的使用

python - Python GC 会像这样处理引用循环吗?

Python 循环未按预期顺序返回数据

python - python如何测试从数据库中提取的一些纯文本中的二进制数据