Python同时迭代多个序列的方法


Posted in Python onJuly 28, 2020

问题

你想同时迭代多个序列,每次分别从一个序列中取一个元素。

解决方案

为了同时迭代多个序列,使用 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)
...
1 101
5 78
4 37
2 15
10 62
7 99
>>>

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)]
>>>

以上就是Python同时迭代多个序列的方法的详细内容,更多关于Python同时迭代多个序列的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
Python 多进程和数据传递的理解
Oct 09 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
python爬取m3u8连接的视频
Feb 28 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python给图像添加噪声具体操作
Mar 03 Python
python挖矿算力测试程序详解
Jul 03 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
django如何实现视图重定向
Jul 24 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
Python如何读取、写入JSON数据
Jul 28 #Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 #Python
Python基于xlutils修改表格内容过程解析
Jul 28 #Python
Python如何读取、写入CSV数据
Jul 28 #Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 #Python
pycharm全局搜索的具体步骤
Jul 28 #Python
Django model重写save方法及update踩坑详解
Jul 27 #Python
You might like
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
详解YII关联查询
2016/01/10 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
js实现简单进度条效果
2020/03/25 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
React实现轮播效果
2020/08/25 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
在Django中同时使用多个配置文件的方法
2015/07/22 Python
Python中subprocess的简单使用示例
2015/07/28 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Python3列表List入门知识附实例
2020/02/09 Python
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
C#面试常见问题
2013/02/25 面试题
教师实习期自我鉴定
2013/10/06 职场文书
运动会入场词50字
2014/02/20 职场文书
清扬洗发水广告词
2014/03/14 职场文书
水电维修专业推荐信
2014/09/06 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书