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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
聊聊python中的循环遍历
Sep 07 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
python 实现图片修复(可用于去水印)
Nov 19 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 Python
详解Pymongo常用查询方法总结
Jan 29 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 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
用libtemplate实现静态网页生成
2006/10/09 PHP
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP XML数据解析代码
2010/05/26 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
学期自我鉴定
2013/11/04 职场文书
韩国商务邀请函
2014/01/14 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
观看建国大业观后感
2015/06/01 职场文书
汉字听写大会观后感
2015/06/12 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏