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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
使用pandas读取文件的实现
Jul 31 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
Python 随机按键模拟2小时
Dec 30 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 Python
Django给表单添加honeypot验证增加安全性
May 06 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
php学习笔记之 函数声明
2011/06/09 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
给ECShop添加最新评论
2015/01/07 PHP
微信支付开发维权通知实例
2016/07/12 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
平面设计师工作职责范文
2013/12/03 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
保险内勤岗位职责
2014/04/05 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers