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运算π的值深入Python中科学计算的实现
Apr 17 Python
详解python进行mp3格式判断
Dec 23 Python
Python常见异常分类与处理方法
Jun 04 Python
python如何统计序列中元素
Jul 31 Python
Flask之flask-session的具体使用
Jul 26 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
Python中logging实例讲解
Jan 17 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
python语言是免费还是收费的?
Jun 15 Python
Python中random模块常用方法的使用教程
Oct 04 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 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/09/04 PHP
基于php下载文件的详解
2013/06/02 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
使用angular写一个hello world
2015/01/23 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
重命名批处理python脚本
2013/04/05 Python
利用python批量检查网站的可用性
2016/09/09 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
零基础小白多久能学会python
2020/06/22 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
StubHub德国:购买和出售门票
2017/09/06 全球购物
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
导游词之丽江普济寺
2019/10/22 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android