Python 3中的zip()函数
问题内容:
这个问题已经在这里有了答案 :
在zip对象列表上执行len会清除zip [重复] (2个答案)
5年前关闭。
我知道如何zip()
在Python 3中使用该函数。我的问题是关于以下内容,我以某种方式感到很奇怪:
我定义了两个列表:
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
在解释器中键入多少次,总能获得预期的结果,而且永远不会有一个空列表。
问题答案:
与Python 2不同,Python 3中的zip
函数返回一个 迭代器
。迭代器只能用一次(通过从列表中删除列表)。这样做的目的是通过仅在需要时生成迭代器的元素,而不是一次将其全部放入内存来节省内存。如果要重复使用压缩的对象,只需像在第二个示例中一样,从中创建一个列表,然后使用类似的方法复制该列表
test2 = list(zip(lis1,lis2))
zipped_list = test2[:]
zipped_list_2 = list(test2)