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抓取京东价格分析京东商品价格走势
Jan 09 Python
python写入中英文字符串到文件的方法
May 06 Python
详解Python核心对象类型字符串
Feb 11 Python
PyQT实现多窗口切换
Apr 20 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
python 制作自定义包并安装到系统目录的方法
Oct 27 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
python通过链接抓取网站详解
Nov 20 Python
Django异步任务线程池实现原理
Dec 17 Python
Pytorch 实现变量类型转换
May 17 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
JavaScript闭包详解
2015/02/02 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
Vuex简单入门
2017/04/19 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
python中split方法用法分析
2015/04/17 Python
一道python走迷宫算法题
2018/01/22 Python
python 输出上个月的月末日期实例
2018/04/11 Python
基于python绘制科赫雪花
2018/06/22 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
Python字典遍历操作实例小结
2019/03/05 Python
python自动生成model文件过程详解
2019/11/02 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
荟萃全球保健品:维他购
2018/05/09 全球购物
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
网游商务专员求职信
2013/10/15 职场文书
运动会广播稿300字
2014/01/10 职场文书
高中毕业自我评价
2014/02/08 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
长江三峡导游词
2015/01/31 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL