流畅的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
时间: 2024-08-07 21:17:33

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

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

1.随机选择 python中生成随机数使用random模块. 1.从序列中随机挑选元素,使用random.choice() >>> import random >>> values = [1, 2, 3, 4, 5, 6] >>> random.choice(values) 3 >>> random.choice(values) 3 >>> random.choice(values) 1 >>> r

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

1.函数的默认参数必须不可变 如果函数的默认参数为可变的对象,那么默认参数在函数外被修改也会影响到函数本身的. >>> def spam(a, b=None): # b要为不可变参数,不能使用空列表 [] 等可变参数 ... if b is None: ... b = [] ... 2.匿名函数 1.想不出函数名时,或想要一种短小的操作,可以使用匿名函数 >>> sum = lambda x, y: x + y >>> sum(2, 3) 5 >

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

1.双向队列 collections.deque 类(双向队列)是一个线程安全.可以快速从两端添加或者删除元素的数据类型. rotate和popleft操作,rorate可以把前后元素换位.popleft可以从左边删除元素,extendleft可以从左边添加元素. >>> from collections import deque # 导入deque模块 >>> dq = deque(range(10), maxlen=10) # deque可以有maxlen参数,限制

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

1.元组拆包和解压序列赋值 任何的序列 (或者是可迭代对象) 可以通过一个简单的赋值语句解压并赋值给多个 变量.唯一的前提就是变量的数量必须跟序列元素的数量是一样的. 1.平行赋值: >>> x = (1, 2) >>> a, b = x # 元组拆包 >>> a 1 >>> b 2 2.以用 * 运算符把一个可迭代对象拆开作为函数的参数: >>> divmod(20, 8) # 20求8的余,2 * 8 + 4 =

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

1.数据结构 1.1 内置序列类型 四种序列类型: 1.容器序列:list.tuple和collections.deque 2.扁平序列:str.bytes.bytearray.memoryview和array.array 3.可变序列:list.bytearray.array.array.collections.deque 和 memoryview 4.不可变序列:tuple.str 和 bytes 1.2 列表推导 1.列表推导(list comprehension):列表推导是构建列表(l

python之raw_input()(学习笔记六)

python之raw_input()(学习笔记六) 我们经常使用raw_input()读取用户的输入,如下例子所示: >>> name = raw_input('please input your name:'),截图如下: 下面简单说下,raw_input()与if搭配使用,脚本如下: #!/usr/bin/env python # -*- coding:utf-8 -*- birth = raw_input('birth:') if birth < 2000: print '0

Mysql Cookbook学习笔记第二章

1,使用python链接mysql + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # -*- coding: utf-8 -*- # connect.py --连接到MySQL服务器 import sys import MySQLdb try:     conn = MySQLdb.connect(db = "cookbook",                            host = "localhost"

swift学习笔记(六)析构过程和使用闭包对属性进行默认值赋值

一.通过闭包和函数实现属性的默认值 当某个存储属性的默认值需要定制时,可以通过闭包或全局函数来为其提供定制的默认值. 注:全局函数结构体和枚举使用关键字static标注    函数则使用class关键字标注 当对一个属性使用闭包函数进行赋值时,每当此属性所述的类型被创建实例时,对应的闭包或函数会被调用,而他们的返回值会被作为属性的默认值. ESC: Class SomeCLass{ let someProperty:SomeType={ //给someProperty赋一个默认值 //返回一个与

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这