【问题标题】:python list(zipobject) returns empty (list) container [duplicate]python list(zipobject)返回空(列表)容器[重复]
【发布时间】:2015-07-01 23:37:23
【问题描述】:

我在 Python 3.4.3 中遇到了一个奇怪的问题,似乎没有在任何地方提及。

让我们说:
a = [1,2,3,4]b = [5,6,7,8]

垂直连接这些:ab = zip(a,b) 在 python 3 中,ab 本身会返回:

压缩对象在(一些十六进制数)

在这里,在 python 3 中,检索连接列表:
aabb = list(ab)

现在问题来了,aabb 第一次确实会返回一个真实的列表:
[(1, 5), (2, 6), (3, 7), (4, 8)]

但是,如果您再次执行整个过程,list(aabb) 将只返回一个空的 [] 容器,就像 list() 会做的那样。

只有在我重新启动 shell/解释器后它才能再次工作。

这是正常现象还是错误?

编辑:好吧,伙计们,我没有意识到这与zip有关,它似乎是恒定的,因为ab每次都返回相同的十六进制值,所以我认为这与@有关987654334@.

无论如何,通过重新分配ab = zip(ab)解决了

根据我对答案和原始链接的理解,ab 一经阅读就会被处置。

【问题讨论】:

  • @vaultah 我在文档的那个部分中没有看到list(list(zip([1,2,3,4], [5,6,7,8]))) == [] 的任何地方。也许你能解释一下? @DonD,这就是你要说的?
  • @vaultah 请详细说明,它没有说明为什么它只工作一次。为什么我一发布它就被否决了。
  • @vaultah 最大的问题是list(aabb) 不返回空列表,因为参数是填充列表而不是空迭代器。该问题说明了一个不正确的问题,没有完整的代码示例。
  • @dbliss 这是一个错误的陈述。

标签: python list


【解决方案1】:

这个问题不会由list(aabb) 造成,而是由您的代码中的list(ab) 造成:

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]

ab = zip(a, b)
aabb = list(ab)

print(list(ab))  # -> []

问题在于zip 是一个iterator,它存储一次值,然后像这样处理:

ab = zip(a, b)  # iterator created
aabb = list(ab)  # elements read from ab, disposed, placed in a list

print(list(ab))  # now ab has nothing because it was exhausted

另一方面,这应该可以工作,因为aabb 只是一个列表,而不是耗尽的迭代器ab

ab = zip(a, b)
aabb = list(ab)

print(list(aabb))  # -> [(1, 5), (2, 6), (3, 7), (4, 8)]

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 2019-06-01
    • 1970-01-01
    • 2021-12-21
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多