Python 枚举和 for 循环输出

问题描述

我有两个关于以下代码的问题:

  1. 为什么在 for 循环之后我会从 enum_l1 中丢失 (0,1) 和从 enum_l2 中丢失 (0,3) ?
  2. 如果我不把前 2 个打印作为注释,我将看不到最后 2 个打印(简而言之,程序将只显示“enum_l1 before:”和“enum_l2 before:”而没有“enum_l1 after:”和“enum_l2 之后:”)。反之亦然。为什么?为什么我需要添加才能查看此代码中的所有 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),2)]

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

谢谢。

解决方法

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

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

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

enumeration 创建一个迭代器对象。当你用它初始化一个列表(在 print 语句中完成)时,它会消耗迭代器。之后没有更多的值可以从它返回。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...