这个问题不是在迭代过程中Dictionary更改大小的重复-代码在Py2中有效,而在Py3中无效。这个问题问为什么不对此强制执行list,而不是如何修复代码。
Python将愉快地执行
li = [1, 2, 3]
for n in li:
if n % 2 == 0:
li.remove(n)
Run Code Online (Sandbox Code Playgroud)
但是,如果我们尝试使用字典:
a = {1: '', 2: '', 3: ''}
for n in a:
if n % 2 == 0:
a.pop(n)
Run Code Online (Sandbox Code Playgroud)
我们得到
RuntimeError: dictionary changed size during iteration
Run Code Online (Sandbox Code Playgroud)
因为我假设这是实现细节,所以我会注意到这已经在CPython 3.7.0和3.4.2中进行了测试。
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |