流畅的python和cookbook学习笔记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流畅的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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章