Python for loop跳过项

2024-05-16 20:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有这个代码:

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)

由于某些原因,loop print语句没有打印“长颈鹿”。我不知道为什么,我遗漏了什么吗?在


Tags: 代码inindexitemeggscatprintanimals
1条回答
网友
1楼 · 发布于 2024-05-16 20:20:00

首先,这实际上是早餐而不是早餐。你打破(结束)的是禁食(没有食物),而不是盛宴(有很多食物)。在

但那只是我的学究作风:-)


现在,我们来谈谈实际问题。你不应该在列举列表的时候修改它(技术上,你可以这样做,但是你会得到你所看到的奇怪的结果)。在

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

可以将枚举看作是使用索引逐步遍历animals中的每个元素。在

当您到达索引2(waffle)并发现它在breakfast_foods中时,您将该索引处的项移除,然后将其他项随机移动,这样您就得到了:

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

然后枚举转到索引3(现在是turtle),然后打印出来,在这个过程中跳过长颈鹿。在

无论如何,也许一种更具Python式的方法是:

^{pr2}$

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

相关问题 更多 >