同时迭代多个序列

问题

你想同时迭代多个序列,每次分别从一个序列中取一个元素。

解法

为了同时迭代多个序列,使用 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 Cookbook 3rd》笔记(4.11):同时迭代多个序列相关推荐

  1. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  2. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  3. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  4. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  5. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  6. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  7. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  8. [python Cookbook]阅读笔记

    @toc] 前记:为了补充一下python语法知识,感谢网友的推荐阅读了pythonCookbook,这本书确实不错,以问题为导向,引导解决思路. 这个博文是从阅读笔记typora中直接复制过来的没有 ...

  9. 《Python cookbook》笔记一

    <Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...

最新文章

  1. 概要设计实例_多核片上系统(SoC)架构的嵌入式DSP软件设计
  2. static用法解析---java语言
  3. CNN模型复杂度(FLOPs、MAC)、参数量与运行速度
  4. saltstack mysql_saltstack mysql returner
  5. 多比(SVG/VML)图形控件多比(SVG/VML)图形拓扑图控件免费下载地址
  6. 笔记-高项案例题-2016年下-计算题
  7. tomcat启动停止在 Initializing Spring root WebApplicationContext,就不运行了
  8. Codeforces Round #184 (Div. 2)
  9. Windows Server AD修改还原模式密码
  10. 手绘风海报怎么做?手绘素材在哪里找?
  11. 为【桌面右键菜单 - 新建文档】添加快捷键
  12. 三维光学测量技术在汽车设计及零部件制造过程中的应用
  13. 郎咸平:用友和金蝶的长板在哪儿
  14. 【机器学习】逻辑回归案例一:保险与年龄之间关系分析
  15. 【数据api】数据API企业关键字模糊查询
  16. fabric-ca-client 详解动态添加组织
  17. 利用全长转录组多重阵列测序检测同源异构体
  18. Google搜索中国定制版已黄了,百度再次PK的希望或落空
  19. 郭炜:就算倒在离开源成功最近的五米,也要让下一代开源人坚定前行
  20. java古诗_java--补全诗句代码

热门文章

  1. wince6.0开机自启动应用程序
  2. java utf8 byte_byte以及UTF-8的转码规则
  3. 在android studio中如何创建一个类来继承另外一个类_在Android使用Transition API检测用户活动...
  4. python中osgeo库使用教程链接
  5. 【转】DELPHI 对DICOM中的窗宽、窗位调整
  6. 设计模式(三)创建型模式
  7. 面向对象软件开发代码结构(1)
  8. 【HDU - 1754】I Hate It (线段树模板 单点覆盖更新+区间最大值查询)
  9. 机器学习笔记(3):线性代数回顾
  10. 4.Model Validation