Python 转换为列表后,枚举对象为空

Python 转换为列表后,枚举对象为空,python,enumerate,Python,Enumerate,转换时,枚举对象变为空: myTuple = (1, 2, 3) myEnum = enumerate(myTuple) print(myEnum) print(list(myEnum)) print(myEnum) print(list(myEnum)) 返回可以迭代一次的对象。那就用光了 如果要多次枚举序列,可以多次调用enumerate: for i,x in enumerate(my_items): print(i,x) for i,x in enumerate(my_i

转换时,枚举对象变为空:

myTuple = (1, 2, 3)

myEnum = enumerate(myTuple)

print(myEnum)
print(list(myEnum))

print(myEnum)
print(list(myEnum))
返回可以迭代一次的对象。那就用光了

如果要多次枚举序列,可以多次调用
enumerate

for i,x in enumerate(my_items):
    print(i,x)
for i,x in enumerate(my_items):
    print(i,x)
enumerated_items = list(enumerate(my_items))
for i,x in enumerated_items:
    print(i,x)
for i,x in enumerated_items:
    print(i,x)
e = enumerate(my_items):
for i,x in e:
    print(i,x)
for i,x in e:
    print(i,x) # won't happen
或者将enumerate对象转换为列表,然后重复多次:

for i,x in enumerate(my_items):
    print(i,x)
for i,x in enumerate(my_items):
    print(i,x)
enumerated_items = list(enumerate(my_items))
for i,x in enumerated_items:
    print(i,x)
for i,x in enumerated_items:
    print(i,x)
e = enumerate(my_items):
for i,x in e:
    print(i,x)
for i,x in e:
    print(i,x) # won't happen
不能做的是多次迭代枚举对象本身:

for i,x in enumerate(my_items):
    print(i,x)
for i,x in enumerate(my_items):
    print(i,x)
enumerated_items = list(enumerate(my_items))
for i,x in enumerated_items:
    print(i,x)
for i,x in enumerated_items:
    print(i,x)
e = enumerate(my_items):
for i,x in e:
    print(i,x)
for i,x in e:
    print(i,x) # won't happen
因为枚举对象在第一次迭代中用完了


在这个特殊的问题中,将枚举对象传递给
列表
相当于对其进行迭代并将每个项添加到列表中,这样也会耗尽枚举对象。

枚举
返回一个可以迭代一次的对象。那就用光了。它不会“变为空”。感谢您的澄清。这是否回答了您的问题?在Python语言中,
enumerate
的一个实例是迭代器。相反,元组本身不是迭代器,而是iterable的一个示例;您可以调用
iter(myTuple)
在元组上获得一个新的迭代器,它与所有迭代器一样只能迭代一次。大多数需要迭代器的东西(比如
list
)都会尝试调用
iter
的参数来获得迭代器,这样您就不需要经常考虑两者之间的区别。