python如何实现同时迭代多个序列问题

为了同时迭代多个序列,使用zip()函数。比如:>>> xpts=[1, 5, 4, 2, 10, 7]

>>> ypts=[101, 78, 37, 15, 62, 99]>>> for x, y in zip(xpts, ypts):

… print(x,y)…

11015784372151062799>>>

zip(a, b)会生成一个可返回元组(x, y)的迭代器,其中x来自a,y来自b。一旦其中某个序列到底结尾,迭代宣告结束。因此迭代长度跟参数中最短序列长度一致。>>> a=[1, 2, 3]

>>> b=[‘w’,’x’,’y’,’z’]>>> for i in zip(a,b):

… print(i)…

(1,’w’)(2,’x’)(3,’y’)>>>

如果这个不是你想要的效果,那么还可以使用itertools.zip_longest()函数来代替。比如:

>>> from itertools import zip_longest>>> for i in zip_longest(a,b):

… print(i)…

(1,’w’)(2,’x’)(3,’y’)

(None,’z’)

>>> for i in zip_longest(a, b, fillvalue=0):… print(i)

(1,’w’)(2,’x’)(3,’y’)(0,’z’)>>>

讨论

当你想成对处理数据的时候zip()函数是很有用的。比如,假设你头列表和一个值列表,就像下面这样:

headers=[‘name’,’shares’,’price’] values=[‘ACME’, 100, 490.1]

使用zip()可以让你将它们打包并生成一个字典:s= dict(zip(headers,values))

或者你也可以像下面这样产生输出:for name, val in zip(headers, values):

print(name,’=’, val)

虽然不常见,但是zip()可以接受多于两个的序列的参数。这时候所生成的结果元组中元素个数跟输入序列个数一样。比如;>>> a=[1, 2, 3]

>>> b=[10, 11, 12]>>> c=[‘x’,’y’,’z’]

>>> for i in zip(a, b, c):… print(i)

(1, 10,’x’)(2, 11,’y’)(3, 12,’z’)>>>

最后强调一点就是,zip()会创建一个迭代器来作为结果返回。如果你需要将结对的值存储在列表中,要使用list()函数。比如:>>> zip(a, b)

<zip object at 0x1007001b8>>>> list(zip(a, b))

[(1, 10),(2, 11),(3, 12)]>>>

未经允许不得转载:惠生活366 » python如何实现同时迭代多个序列问题

赞 (0) 打赏