今天在处理python(3.5)项目时,在循环列表时遇到一个奇怪的问题。让我解释一下:
>>> some_dict = {'a': 1, 'c': 3, 'b': 2}
>>> some_list = ['a', 'c']
>>> for arg in some_list:
... for k, v in some_dict.items():
... if arg == k:
... values.append(v)
... some_list.remove(k)
...
>>> some_list
['c']
>>> values
[1]
我希望这个代码片段可以:
进一步研究,似乎在删除项目时python不会迭代列表中的下一个项目。即:
>>> a = list(range(5))
>>> for i in a:
... print(i)
... if i == 0:
... a.remove(i)
...
0
2
3
4
所以现在我不太确定这是否是python的怪癖,还是我很愚蠢,但是,我真的不知道为什么会发生这种情况,并且真的希望给出解释。
编辑:为澄清起见,我并不是在寻找解决方案,因为我已经实施了(按照您建议的主题(How to remove items from a list while iterating?的精神),但是在解释为什么这样做发生以及为什么这是有效的代码,以及1)没有引发错误2)跳过了下一项。