从循环中删除一个项目时发生奇怪的行为?

时间:2019-05-16 18:14:01

标签: python loops iterator

今天在处理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]

我希望这个代码片段可以:

  1. 引发RuntimeError(例如从字典中删除元素)或
  2. 实际上从列表中删除了这两个项目(我实际上要这样做)

进一步研究,似乎在删除项目时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)跳过了下一项。

0 个答案:

没有答案