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实现批量下载文件
May 17 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
Python2与Python3的区别实例总结
Apr 17 Python
python for循环remove同一个list过程解析
Aug 14 Python
python numpy存取文件的方式
Apr 01 Python
Python 线程池用法简单示例
Oct 02 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
python中翻译功能translate模块实现方法
Dec 17 Python
python 实现定时任务的四种方式
Apr 01 Python
Python时间操作之pytz模块使用详解
Jun 14 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
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
JavaScript数值数组排序示例分享
2014/05/27 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
jupyter notebook 多行输出实例
2020/04/09 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
Europcar比利时:租车
2019/08/26 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
精彩自我鉴定
2014/01/16 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
小学运动会演讲稿
2014/08/25 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
教师个人培训总结
2015/02/11 职场文书
公司行政管理制度范本
2015/08/05 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS