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中的多重继承实例讲解
Sep 28 Python
Python中的__SLOTS__属性使用示例
Feb 18 Python
Python 装饰器深入理解
Mar 16 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
详解python3中tkinter知识点
Jun 21 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
简单了解python中的与或非运算
Sep 18 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
python 爬取华为应用市场评论
May 29 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用户注册时常用的检验函数实例总结
2014/12/22 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
后勤部长岗位职责
2013/12/14 职场文书
《云雀的心愿》教学反思
2014/02/25 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
2015年药店工作总结
2015/04/20 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python
MySQL 数据类型选择原则
2021/05/27 MySQL
如何使用PyCharm及常用配置详解
2021/06/03 Python
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript
Kubernetes控制节点的部署
2022/04/01 Servers