jas*_*son 15 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)
Run Code Online (Sandbox Code Playgroud)
结果:(1,5)(2,6)(3,7)
完全使用相同的循环代码再次在for循环中显示z(在上一部分和下一部分之间不做任何事情):
for x in z :
print(x)
Run Code Online (Sandbox Code Playgroud)
结果:(空白,无结果)
z仍然存在,如
z
Run Code Online (Sandbox Code Playgroud)
结果是
<zip object at 0xa8d48ec>
Run Code Online (Sandbox Code Playgroud)
我甚至可以重新分配t,t2再次拉链,但是它只能再次使用一次而且只能工作一次.
它应该如何工作?在http://docs.python.org/3.2/library/functions.html#zip的文档中没有提到这一点.
mgi*_*son 16
这就是它在python 3.x中的工作方式.在python2.x中,zip返回了一个元组列表,但对于python3.x,zip其行为类似于itertools.izippython2.x中的行为.要重新获得python2.x行为,只需从zip输出中构造一个列表:
z = list(zip(t,t2))
Run Code Online (Sandbox Code Playgroud)
请注意,在python3.x,大量的内置函数现在返回迭代器而不是列表(map,zip,filter)
Jon*_*nts 10
因为zip在Python 3.x中返回一个迭代器.如果你想重新使用它,那么list先把它做成:
z = list(zip(t, t2))
Run Code Online (Sandbox Code Playgroud)
zip返回一个迭代器(在Python 3中).您只能迭代一次迭代器.当迭代器超出元素时,迭代器不会消失,但迭代迭代器会产生0个元素.如果您想要一个列表,请致电list:
z = list(zip(t, t2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |