流畅的python和cookbook学习笔记(六)
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学习笔记(六)的更多相关文章
- 流畅的python和cookbook学习笔记(七)
1.读写压缩数据文件 使用 gzip 和 bz2 模块来读写压缩文件,不过需要注意文件的模式,默认格式为二进制. # 读取压缩文件 import gzip with gzip.open('somefi ...
- 流畅的python和cookbook学习笔记(五)
1.随机选择 python中生成随机数使用random模块. 1.从序列中随机挑选元素,使用random.choice() >>> import random >>> ...
- 流畅的python和cookbook学习笔记(九)
1.减少可调用对象的参数个数,使用functools.partial冻结参数 使用functools.partial(),可以固定一个或者多个值,减少调用参数. >>> def sp ...
- 流畅的python和cookbook学习笔记(八)
1.函数的默认参数必须不可变 如果函数的默认参数为可变的对象,那么默认参数在函数外被修改也会影响到函数本身的. >>> def spam(a, b=None): # b要为不可变参数 ...
- 流畅的python和cookbook学习笔记(四)
1.数字的四舍五入 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可. round 函数返回离它最近的偶数.也就是说,对 1.5 或者 2.5 的舍入运算都会得到 ...
- 流畅的python和cookbook学习笔记(三)
1.双向队列 collections.deque 类(双向队列)是一个线程安全.可以快速从两端添加或者删除元素的数据类型. rotate和popleft操作,rorate可以把前后元素换位.pople ...
- 流畅的python和cookbook学习笔记(二)
1.元组拆包和解压序列赋值 任何的序列 (或者是可迭代对象) 可以通过一个简单的赋值语句解压并赋值给多个 变量.唯一的前提就是变量的数量必须跟序列元素的数量是一样的. 1.平行赋值: >> ...
- 流畅的python和cookbook学习笔记(一)
1.数据结构 1.1 内置序列类型 四种序列类型: 1.容器序列:list.tuple和collections.deque 2.扁平序列:str.bytes.bytearray.memoryview和 ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
随机推荐
- 深入了解java虚拟机(JVM) 第一章 内存区域分布情况
前言: 本文主要是我自己总结的一些技巧,可能对搜到这篇的来观看的朋友有些很难理解,请见谅. 一.JVM的运行时数据区 总共有两个区域: 1.线程共享区:方法区,java堆 2.线程独占区:虚拟机栈,本 ...
- JS延时器 定时器 暂停器 中断器
// numberMillis 毫秒 function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() ...
- linux开始之旅-01 linux需要知道的这几位
首先介绍几个人,没有这几个人就没有linux. 第一个:肯·汤普逊(左)和丹尼斯·里奇(右) ------ C语言之父 ------学计算机的人都应该认识吧,计算机学院楼道里面都会有这两位. 美 ...
- 虚拟机安装CentOS,网络配置
CentOS6和CentOS7,基础配置差不多. 安装CentOs6,过程:略: 安装完成后,系统默认启用动态ip,每次重启主机IP可能就会变化,搭配Xftp和Xshell工具会很难受,因此设置静态I ...
- Django上传文件的那些参数
# ################## 默认文件上传配置 ######################## from django.core.files.uploadhandler import M ...
- EndNote登陆Web账号时解决不断询问用户名密码
EndNote登陆Web账号时不断询问用户名密码怎么破?EndNote有个同步功能,在登陆Web账号时,EndNote不断的询问账号和密码,可是用户名和密码明明已经填写正确和完毕,就是登陆不上EndN ...
- Windows下的ntfs流文件简介
流文件,即NTFS交换数据流(alternate data streams,简称ADS),是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以 ...
- 问题诊断神器arthas
https://github.com/alibaba/arthas 镜像地址 https://gitee.com/arthas/arthas OGNL https://commons.apache.o ...
- JS实现跨域请求数据--CORS
https://www.cnblogs.com/cjw-ryh/p/7674038.html?utm_source=debugrun&utm_medium=referral
- jQuery 学习笔记(jQuery: The Return Flight)
第一课. ajax:$.ajax(url[, settings]) 练习代码: $(document).ready(function() { $("#tour").on(" ...