Python for循环跳过项目

时间:2014-06-10 00:44:41

标签: python python-2.7

所以我有这段代码:

animals = ['cat', 'dog', 'waffle', 'giraffe', 'turtle']
breakfeast_foods = ['waffle', 'pancake', 'eggs']
for index, item in enumerate(animals):
    print item
    if item in breakfeast_foods:
        animals.pop(index)

由于某种原因,循环打印声明不会打印长颈鹿。'我不知道为什么,有什么我想念的吗?

1 个答案:

答案 0 :(得分:3)

首先,它实际上是早餐而不是早餐。你正在打破(结束)的是快节奏(没有食物)而不是节日(有很多食物)。

但那只是我迂腐: - )


现在,谈到实际的问题。你不应该在枚举时修改列表(从技术上讲,你可以这样做,但你会得到像你所见的奇怪结果)。

这样做会弄乱用于枚举的内部结构。这是一个简化的解释(a)但它应该说明这个概念:

将枚举视为仅使用索引逐步遍历animals中的每个元素。

当你进入索引2(华夫饼干)而你发现它在breakfast_foods时,你删除该索引处的项目并将其他项目随机播放,以便你现在拥有:

['cat', 'dog', 'giraffe', 'turtle']

然后枚举移动到索引3(现在是乌龟)并打印出来,在此过程中跳过长颈鹿。

无论如何,也许更多Pythonic的做法是:

animals = [x for x in animals if x not in breakfast_foods]

(a) Python的特定实现是否使用简单数组或其他数据结构在这里并不重要。解释只是为了说明在迭代数据结构时更改数据结构通常会导致奇怪。