【问题标题】:Printing an unzipped list object returns empty list [duplicate]打印解压缩的列表对象返回空列表[重复]
【发布时间】:2020-09-04 12:45:37
【问题描述】:

在下面的代码中,我试图解压缩一个 zip 对象。

x = [1, 2, 3]; y = ['a', 'b', 'c']

z = zip(x, y)
#print(list(z))                #2nd print statement returns [] if this line is uncommented

unzip = zip(*z)
print(list(unzip))             #returns [(1, 2, 3), ('a', 'b', 'c')]

如果我保持原样,它可以正常工作。但是在取消注释第一个打印语句时,第二个打印语句返回一个空列表,而不是返回解压缩的列表对象。为什么?

【问题讨论】:

    标签: python list python-zip


    【解决方案1】:

    zip 返回一个迭代器。在 Python 中,迭代器可以使用,这意味着一旦你对它们进行迭代,你就不能再这样做了。当你执行list(z) 时,你消耗了迭代器z,所以在zip(*z) 中解压它会给你一个空的迭代器。

    使用迭代器背后的想法是它们使用的空间非常小(复杂度为 O(1)),因此您不能多次迭代它们,因为这意味着您必须存储所有值,从而导致 O(n)复杂。当您多次迭代一个集合时,实际上每次都在生成一个新的迭代器。

    【讨论】:

      【解决方案2】:

      这是因为zip 函数返回一个迭代器,而不是一个新列表。换句话说,它只能被访问一次。
      当您第一次打印它时,解释器会循环遍历此函数的结果。
      因此,您无法第二次访问zip 函数的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-25
        • 1970-01-01
        • 2015-10-16
        • 2020-05-09
        • 1970-01-01
        • 2017-04-24
        • 1970-01-01
        相关资源
        最近更新 更多