【发布时间】:2015-10-19 11:03:19
【问题描述】:
我知道如何在 Python 3 中使用 zip() 函数。我的问题是关于以下我觉得很奇怪的问题:
我定义了两个列表:
lis1 = [0, 1, 2, 3]
lis2 = [4, 5, 6, 7]
我通过以下方式在这些上使用zip():
1. test1 = zip( lis1, lis2)
2. test2 = list(zip(lis1, lis2))
当我在解释器中输入 test1 时,我得到了:
"zip object at 0x1007a06c8"
所以,我在解释器中输入 list(test1) 并得到预期的结果,但是当我再次输入 list(test1) 时,我得到一个空列表。
我觉得奇怪的是,无论我在解释器上输入多少次test2,我总是得到预期的结果,而不是一个空列表。
【问题讨论】:
-
zip()是一个生成器;它只产生一次值。list()创建一个包含任何可迭代对象(包括生成器)的列表,因此您只需提取一次zip()的值并将结果列表存储在lis2中。列表对象不是生成器,它们会跟踪包含的所有值。 -
在 Python 3 中稍微短一点:
test2 = [*zip(lis1, lis2)]. -
而
test2 = *zip(lis1, lis2),将 zip-iterator 解压成一个元组(Python 3)。
标签: python