1.同时迭代多个序列(zip(函数))

  使用zip()函数可以同时迭代多个序列。

>>> X = [1, 2, 3, 4, 5, 6]
>>> Y = [121, 223, 116, 666, 919, 2333]
>>> for x, y in zip(X, Y):
... print(x, y)
...
1 121
2 223
3 116
4 666
5 919
6 2333

  zip(a, b)的作用是创建一个迭代器,产生元组(x, y),x取自a序列,y取自b序列,当a,b序列中其中一个没有元素可以继续迭代时,整个迭代过程结束。

>>> a = [1, 2, 3, 4, 5, 6]
>>> b = ['x', 'y', 'z']
>>> for x, y in zip(a, b):
... print(x, y)
...
1 x
2 y
3 z
>>>

  如果想对多余的序列进行迭代,即上面a中的4,5,6元素,可以使用 itertools.zip_longest() 。

>>> a = [1, 2, 3, 4, 5, 6]
>>> b = ['x', 'y', 'z']
>>> from itertools import zip_longest
>>> for i in zip_longest(a, b):
... print(i)
...
(1, 'x')
(2, 'y')
(3, 'z')
(4, None) # 多余元素对应None
(5, None)
(6, None)
>>> for i in zip_longest(a, b, fillvalue=2): # 可以指定多余元素对应的值
... print(i)
...
(1, 'x')
(2, 'y')
(3, 'z')
(4, 2) # 指定多余元素对应值为2
(5, 2)
(6, 2)

   zip()函数也可以接受多余2个的序列,和2个序列的使用情况一样。

2.在不同的容器中进行迭代

  使用itertools.chain()方法可以用来迭代不同容器中的对象。chain比先合并 a,b 序列再迭代更高效,更优雅,更pythonic。

>>> from itertools import chain
>>> a = [1, 2, 3, 4, 5]
>>> b = ['x', 'y', 'z']
>>> for i in chain(a, b):
... print(i)
...
1
2
3
4
5
x
y
z

3.合并多个有序序列,并对整个有序序列进行迭代

  合并多个有序序列,在对整个有序序列进行迭代,可以使用模块heapq,使用heapq.merge()函数。注意序列必须是有序的。

>>> from heapq import merge
>>> a = [1, 3, 4, 5, 7, 9]
>>> b = [2, 6, 8, 11, 13]
>>> for i in merge(a, b):
... print(i)
...
1
2
3
4
5
6
7
8
9
11
13

流畅的python和cookbook学习笔记(六)的更多相关文章

  1. 流畅的python和cookbook学习笔记(七)

    1.读写压缩数据文件 使用 gzip 和 bz2 模块来读写压缩文件,不过需要注意文件的模式,默认格式为二进制. # 读取压缩文件 import gzip with gzip.open('somefi ...

  2. 流畅的python和cookbook学习笔记(五)

    1.随机选择 python中生成随机数使用random模块. 1.从序列中随机挑选元素,使用random.choice() >>> import random >>> ...

  3. 流畅的python和cookbook学习笔记(九)

    1.减少可调用对象的参数个数,使用functools.partial冻结参数 使用functools.partial(),可以固定一个或者多个值,减少调用参数. >>> def sp ...

  4. 流畅的python和cookbook学习笔记(八)

    1.函数的默认参数必须不可变 如果函数的默认参数为可变的对象,那么默认参数在函数外被修改也会影响到函数本身的. >>> def spam(a, b=None): # b要为不可变参数 ...

  5. 流畅的python和cookbook学习笔记(四)

    1.数字的四舍五入 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可. round 函数返回离它最近的偶数.也就是说,对 1.5 或者 2.5 的舍入运算都会得到 ...

  6. 流畅的python和cookbook学习笔记(三)

    1.双向队列 collections.deque 类(双向队列)是一个线程安全.可以快速从两端添加或者删除元素的数据类型. rotate和popleft操作,rorate可以把前后元素换位.pople ...

  7. 流畅的python和cookbook学习笔记(二)

    1.元组拆包和解压序列赋值 任何的序列 (或者是可迭代对象) 可以通过一个简单的赋值语句解压并赋值给多个 变量.唯一的前提就是变量的数量必须跟序列元素的数量是一样的. 1.平行赋值: >> ...

  8. 流畅的python和cookbook学习笔记(一)

    1.数据结构 1.1 内置序列类型 四种序列类型: 1.容器序列:list.tuple和collections.deque 2.扁平序列:str.bytes.bytearray.memoryview和 ...

  9. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

随机推荐

  1. Echart自定义y轴刻度信息2

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. ajax 提交 json格式数据到后台

    例子:$.ajax({ type: 'POST', url: "/ROOT/modify.do", contentType: "application/json" ...

  3. [Flex] 组件Tree系列 —— 运用openItems获取打开节点

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用openItems获取打开节点 ...

  4. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

    使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的.例如,对于如下语句:final StringBuffer a=new StringBuffer( ...

  5. Angularjs2 学习笔记

    angularjs2 学习笔记(一) 开发环境搭建   开发环境,vs2013 update 5,win7 x64,目前最新angular2版本为beta 17 第一步:安装node.js 安装nod ...

  6. 【数据结构】10分钟教你用栈求解迷宫老鼠问题超详细教程附C++源代码

    问题描述 给定一张迷宫地图和一个迷宫入口,然后进入迷宫探索找到一个出口.如下图所示: 该图是一个矩形区域,有一个入口和出口.迷宫内部包含不能穿越的墙壁或者障碍物.这些障碍物沿着行和列放置,与迷宫的边界 ...

  7. 容器化VS微服务

    1 微服务 1.1 思想 开发人员自己测试.部署和运维自己编写的代码,即自己负责构建生命周期的全部. 1.2 Spring Boot 提供服务化的能力,即把容器.服务所需依赖和服务一起打包成一个jar ...

  8. virsh 连接虚拟机 (vnc 或 控制台)

    第一种方式 1.如果虚拟机登录方式为VNC,在ubuntu机器上安装vncviewer 在虚拟机的配置xml中 <graphics type="vnc" autoport=& ...

  9. 玩转MongoDB

    一.主从复制 1)首先主从服务器在启动的时候,分别要设置master.slave选项,对于slave可以启动中设置源,也可以在启动后设置源. 如:主:mongod --dbpath=/data/mon ...

  10. for ++i i++

    study from: https://zhidao.baidu.com/question/339305815.html 处理方式的不同,速度上的微妙不同 有些高手能喜欢用++i,速度上快一点