python列表(zipobject)返回空(列表)容器
我在Python3.4.3中遇到了一个奇怪的问题,似乎在任何地方都没有提到 让我们说: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)将返回
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这是一个错误的陈述。