5.4.13Python下zip并行遍历多个序列
Posted by 撒得一地 on 2016年3月24日 in python教程
在Python程序中,可以同时迭代两个序列。比如有下面两个列表:
names = ['jack','peter','psz'] ages = [12,15,17]
如果想要打印名字和对应的年龄,可以像下面这样做:
>>> names = ['jack','peter','psz'] >>> ages = [12,15,17] >>> for i in range(len(names)): ... print(names[i],'is',ages[i],'years old') ... jack is 12 years old peter is 15 years old psz is 17 years old
这里i是循环索引的标准变量名。
还可以使用内建的zip函数用来进行并行迭代,可以把两个序列“压缩”在一起,然后返回一个元组的列表:
>>> for (name,age) in zip(names,ages): ... print(name,'is',age,'years old') ... jack is 12 years old peter is 15 years old psz is 17 years old
在上面的实例中:
>>> zip(names,ages) #zip(names,ages)等价于[('jack',12),('peter',15),('psz',17)] <zip object at 0x02420260>
zip函数也可以作用于任意多个序列,这一点在某些情况下非常好用,比如:
>>> a = [1,2,3] >>> b = [1,2,3] >>> c = [1,2,3] >>> for (x,y,z) in zip(a,b,c): ... print(x,y,z) ... 1 1 1 2 2 2 3 3 3
上面的zip(a,b,c)最后等价于[(1,1,1),(2,2,2),(3,3,3)]。
关于很重要的一点是,zip还可以应付不等长的序列,当最短的序列“用完”的时候就会停止,比如:
>>> a = [1,2,3] >>> b = [1,2,3,4] >>> c = [1,2,3,4,5] >>> for (x,y,z) in zip(a,b,c): ... print(x,y,z) ... 1 1 1 2 2 2 3 3 3