首次使用后,zip变量为空

时间:2013-07-21 21:41:13

标签: python python-3.x

Python 3.2.3,使用Idle,Python shell

t = (1,2,3)
t2 = (5,6,7)
z = zip(t,t2)

for x in z :
    print(x)

结果: (1,5) (2,6) (3,7)

完全使用相同的循环代码再次在for循环中显示z,紧接着(在上一部分和下一部分之间不执行任何操作):

for x in z :
    print(x)

结果: (空白,无结果)

z仍然存在,如

z

结果

<zip object at 0xa8d48ec>

我甚至可以重新分配t,t2再次压缩,但之后它只能再次使用一次。

它应该如何运作?文档http://docs.python.org/3.2/library/functions.html#zip中没有提到这一点。

3 个答案:

答案 0 :(得分:14)

这就是它在python 3.x中的工作原理。在python2.x中,zip返回了一个元组列表,但是对于python3.x,zip的行为类似于itertools.izip在python2.x中的行为。要重新获得python2.x行为,只需从zip的输出构建一个列表:

z = list(zip(t,t2))

请注意,在python3.x中,很多内置函数现在返回迭代器而不是列表(mapzipfilter

答案 1 :(得分:8)

因为zip在Python 3.x中返回迭代器。如果您想重新使用它,请先将其设为list

z = list(zip(t, t2))

答案 2 :(得分:5)

zip返回一个迭代器(在Python 3中)。您只能迭代一次迭代器。当迭代器超出元素时,迭代器不会消失,但迭代迭代器会产生0个元素。如果您需要列表,请在其上调用list

z = list(zip(t, t2))