所以我有这段代码:
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)
由于某种原因,循环打印声明不会打印长颈鹿。'我不知道为什么,有什么我想念的吗?
答案 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的特定实现是否使用简单数组或其他数据结构在这里并不重要。解释只是为了说明在迭代数据结构时更改数据结构通常会导致奇怪。