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实现把xml或xsl转换为html格式
Apr 08 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
Python中列表、字典、元组数据结构的简单学习笔记
Mar 20 Python
Python单链表简单实现代码
Apr 27 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
pandas通过索引进行排序的示例
Nov 16 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
Python如何使用函数做字典的值
Nov 30 Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 Python
Python定义函数实现累计求和操作
May 03 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
Jun 24 Python
如何利用pygame实现打飞机小游戏
May 30 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
详解django2中关于时间处理策略
2019/03/06 Python
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
内容编辑个人求职信
2013/12/10 职场文书
酒店总经理助理职责
2014/02/12 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
股权投资协议书
2016/03/23 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
Java详细解析==和equals的区别
2022/04/07 Java/Android
JS高级程序设计之class继承重点详解
2022/07/07 Javascript