为什么我在 python 中使用 zip 后得到空列表?

Why I'm getting empty list after using zip in python?

在压缩两个列表并将 zip 对象打印为列表后,我得到了所需的输出。但是当我想从 zip 对象制作另一个列表时,我得到一个空列表。为什么会这样?

代码:

result = zip(number_list, str_list)

# Converting iterator to list
result_list = list(result)
result_list2 = list(result)


print(result_list)
print(result_list2)

输出:

[(1, 'one'), (2, 'two'), (3, 'three')]
[]

zip returns 一个迭代器对象。第一次将它转换为列表时,迭代器被消耗,在那之后它是空的。如果立即将其转换为列表然后 copy it:

,您将获得预期的行为
result = list(zip(number_list, str_list))

# Converting list to more lists
result_list = result.copy()
result_list2 = result.copy()

一般来说,zip 对象应该立即使用(例如,在 for 循环中或直接传递给采用可迭代对象的函数)。将调用 zip 的结果分配给变量在很多情况下都没有用。

因为zip returns一个迭代器,而迭代器只能迭代一次。

第一次从 zip 对象创建列表时:

>>> result_list = list(result)

迭代结果中的项目并从中创建一个列表。

下次您尝试从同一个 zip 对象创建列表时,项目已经迭代并且不会进一步迭代,这就是您得到空列表的原因。

>>> result_list2 = list(result)

您可以尝试将结果传递给 next,您将得到 StopIterationError,这意味着迭代器无法再进一步迭代:

>>> next(result)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
StopIteration