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使用新浪微博API发送微博的例子
Apr 10 Python
Python计算一个文件里字数的方法
Jun 15 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
基于python实现名片管理系统
Nov 30 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Python容器类型公共方法总结
Aug 19 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中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
Python OS模块常用函数说明
2015/05/23 Python
Python yield 使用浅析
2015/05/28 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
python3爬取torrent种子链接实例
2020/01/16 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
Django缓存Cache使用详解
2020/11/30 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
存储过程和函数的区别
2013/05/28 面试题
优秀员工自荐书
2013/12/19 职场文书
20年同学聚会感言
2014/02/03 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
2014年学生工作总结
2014/11/20 职场文书
违纪开除通知书
2015/04/25 职场文书
Python使用永中文档转换服务
2022/05/06 Python