Python 3中的zip()函数

2024-05-16 20:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道如何在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多少次,我总是得到预期的结果,而不是空列表。


Tags: 方法函数列表键入定义objectzip解释器
2条回答

与Python2不同,Python3中的zip函数返回一个迭代器。迭代器只能被耗尽一次(比如列出一个列表)。这样做的目的是通过仅根据需要生成迭代器的元素来节省内存,而不是一次将其全部放入内存。如果您想重用压缩后的对象,只需像在第二个示例中那样从中创建一个列表,然后通过以下方式复制该列表

 test2 = list(zip(lis1,lis2))
 zipped_list = test2[:]
 zipped_list_2 = list(test2)

Python 3中的^{}函数返回迭代器。这就是为什么当你打印test1时,你会得到-<zip object at 0x1007a06c8>From documentation-

Make an iterator that aggregates elements from each of the iterables.

但是一旦你做了-list(test1)-你就耗尽了迭代器。所以在那之后,任何时候你这样做只会导致空列表。

对于test2,您已经创建了一次列表,test2是一个列表,因此它将始终是该列表。

相关问题 更多 >