首页 > 解决方案 > Python枚举和for循环输出

问题描述

我对以下代码有 2 个问题:

  1. 为什么在 for 循环之后我会从 enum_l1 中丢失 (0, 1) 并从 enum_l2 中丢失 (0, 3)?
  2. 如果我不将前 2 个打印作为注释,我将看不到最后 2 个打印(简而言之,程序将只显示 "enum_l1 before:" 和 "enum_l2 before:" 而没有 "enum_l1 after:" 和 "enum_l2 after :")。反之亦然。为什么?为什么我需要添加才能查看此代码中的所有 4 个打印件?
list1 = [1,2,3]
list2 = [3,1,2]

enum_l1 = enumerate(list1)
#print("enum_l1 before: ", list(enum_l1))
enum_l2 = enumerate(list2)
#print("enum_l2 before: ", list(enum_l2))

for count1, value1 in enum_l1:
    for count2, value2 in enum_l2:
        print("enum_l1 after: ", list(enum_l1))
        print("enum_l2 after: ", list(enum_l2))

输出:

enum_l1 before:  [(0, 1), (1, 2), (2, 3)]
enum_l2 before:  [(0, 3), (1, 1), (2, 2)]

enum_l1 after:  [(1, 2), (2, 3)]
enum_l2 after:  [(1, 1), (2, 2)]

谢谢你。

标签: pythonfor-loopenumerate

解决方案


enum_l1是一个迭代器。在循环内部,您提取第一个元素,(0,1)然后打印错过第一个实例count1, value1的迭代器的状态,而不是打印。enum_l1

您在循环中看到的行为相当于:

enum_l1 = enumerate(list1)
print(next(enum_l1))
print(list(enum_l1))

推荐阅读