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+Django在windows下的开发环境配置图解
Nov 11 Python
Python修改Excel数据的实例代码
Nov 01 Python
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python中的ConfigParser模块使用详解
May 04 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
python常用函数与用法示例
Jul 02 Python
Softmax函数原理及Python实现过程解析
May 22 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
java字符串格式化输出实例讲解
Jan 06 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
php strtotime 函数UNIX时间戳
2009/01/14 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
PHP多进程编程实例详解
2017/07/19 PHP
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
基于jquery实现五星好评
2017/11/18 jQuery
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
Python根据成绩分析系统浅析
2019/02/11 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
夏尔巴人登珠峰品牌:Sherpa Adventure Gear
2018/02/08 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
android面试问题与答案
2016/12/27 面试题
2014年创卫实施方案
2014/02/18 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP