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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
python 判断自定义对象类型
Mar 21 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
python如何求圆的面积
Jul 01 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 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编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
php防止sql注入代码实例
2013/12/18 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
利用php生成验证码
2017/02/23 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
Django+Vue实现WebSocket连接的示例代码
2019/05/28 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python中常用信号signal类型实例
2018/01/25 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
keras打印loss对权重的导数方式
2020/06/10 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
学校开学标语
2014/10/06 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
高中开学感言
2015/08/01 职场文书