python列表(zipobject)返回空(列表)容器

python列表(zipobject)返回空(列表)容器,python,list,Python,List,我在Python3.4.3中遇到了一个奇怪的问题,似乎在任何地方都没有提到 让我们说: a=[1,2,3,4]和b=[5,6,7,8] 要垂直连接它们:ab=zip(a,b) 在python 3中,ab本身将返回: zip对象位于(某个十六进制数) 在Python3中,在这里检索连接的列表: aabb=list(ab) 现在问题来了,第一次,aabb确实会返回一个真实的列表: [(1,5)、(2,6)、(3,7)、(4,8)] 但是,第二次及以后,如果再次执行整个过程,list(aabb)将返回

我在Python3.4.3中遇到了一个奇怪的问题,似乎在任何地方都没有提到

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

要垂直连接它们:
ab=zip(a,b)
在python 3中,
ab
本身将返回:

zip对象位于(某个十六进制数)

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

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

但是,第二次及以后,如果再次执行整个过程,
list(aabb)
将返回一个空的
[]
容器,就像
list()
一样

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

这是正常还是错误

编辑:好了,伙计们,我没有意识到这与
zip
有关,因为
ab
每次都返回相同的十六进制值,所以我认为这与
list(ab)
有关

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


根据我在答案和原始链接中的理解,
ab
在阅读后会被处理。

这个问题不会由
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
是一种存储值一次,然后按如下方式处理的方法:

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)]

此问题不是由
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
是一种存储值一次,然后按如下方式处理的方法:

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)]

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