"""
在 Python 中,在迭代列表的同时修改它可能导致意外的结果, 因为这会破坏迭代器的状态。在你的代码中,当你尝试删除元素时, 迭代器可能会跳过下一个元素,导致删除的不是你预期的元素。
"""
lst = [1, 2, 2, 3, 5]
for i in lst:if i == 2:lst.remove(i)
print(lst) # [1, 2, 3, 5] 遍历时第一个2做删除时,跳过了第二个2,所以第二个2没被删除
# 解决办法:在循环拷贝的列表中删除当前列表元素,不会影响拷贝列表的迭代
lst = [1, 2, 2, 3, 5]
for i in lst.copy():if i == 2:lst.remove(i)
print(lst) # [1, 3, 5]
# 字典也是一样,可以转换成列表循环,也可以拷贝,一个意思
my_dict = {'a': 1, 'b': 2, 'c': 2, 'd': 3}# for k, v in my_dict.items(): # RuntimeError: dictionary changed size during iterationfor k, v in list(my_dict.items()):if v == 2:my_dict.pop(k, 0)
print(my_dict) # {'a': 1, 'd': 3}
my_dict = {'a': 1, 'b': 2, 'c': 2, 'd': 3}
for k, v in my_dict.copy().items():if v == 2:my_dict.pop(k, 0)
print(my_dict) # {'a': 1, 'd': 3}