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用fork来创建子进程注意事项
Jul 03 Python
Python将图片转换为字符画的方法
Jun 16 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
对django layer弹窗组件的使用详解
Aug 31 Python
使用python绘制温度变化雷达图
Oct 18 Python
wxpython绘制音频效果
Nov 18 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
python SOCKET编程基础入门
Feb 27 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无限分类的类
2007/01/02 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python 计算文件的md5值实例
2017/01/13 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python getopt模块使用实例解析
2019/12/18 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
Python正则表达式学习小例子
2020/03/03 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
开业庆典活动策划方案
2014/09/21 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
5道关于python基础 while循环练习题
2021/11/27 Python
Nginx限流和黑名单配置
2022/05/20 Servers
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js