Python同时迭代多个序列的方法
问题
你想同时迭代多个序列,每次分别从一个序列中取一个元素。
解决方案
为了同时迭代多个序列,使用zip()函数。比如:
>>>xpts=[1,5,4,2,10,7] >>>ypts=[101,78,37,15,62,99] >>>forx,yinzip(xpts,ypts): ...print(x,y) ... 1101 578 437 215 1062 799 >>>
zip(a,b)会生成一个可返回元组(x,y)的迭代器,其中x来自a,y来自b。一旦其中某个序列到底结尾,迭代宣告结束。因此迭代长度跟参数中最短序列长度一致。
>>>a=[1,2,3] >>>b=['w','x','y','z'] >>>foriinzip(a,b): ...print(i) ... (1,'w') (2,'x') (3,'y') >>>
如果这个不是你想要的效果,那么还可以使用itertools.zip_longest()函数来代替。比如:
>>>fromitertoolsimportzip_longest >>>foriinzip_longest(a,b): ...print(i) ... (1,'w') (2,'x') (3,'y') (None,'z')
>>>foriinzip_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))
或者你也可以像下面这样产生输出:
forname,valinzip(headers,values): print(name,'=',val)
虽然不常见,但是zip()可以接受多于两个的序列的参数。这时候所生成的结果元组中元素个数跟输入序列个数一样。比如;
>>>a=[1,2,3] >>>b=[10,11,12] >>>c=['x','y','z'] >>>foriinzip(a,b,c): ...print(i) ... (1,10,'x') (2,11,'y') (3,12,'z') >>>
最后强调一点就是,zip()会创建一个迭代器来作为结果返回。如果你需要将结对的值存储在列表中,要使用list()函数。比如:
>>>zip(a,b)>>>list(zip(a,b)) [(1,10),(2,11),(3,12)] >>>
以上就是Python同时迭代多个序列的方法的详细内容,更多关于Python同时迭代多个序列的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。