zoukankan      html  css  js  c++  java
  • 流畅的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
  • 相关阅读:
    人工智能深度学习:TensorFlow2.0如何保持和读取模型?
    人工智能深度学习:TensorFlow2.0实现回归问题
    InnoDB存储引擎中的锁
    Spring源码系列8
    Spring源码系列7
    Spring源码系列6
    Spring源码系列5
    Spring源码系列4
    Spring源码系列3
    Spring源码系列2
  • 原文地址:https://www.cnblogs.com/zt19994/p/7499336.html
Copyright © 2011-2022 走看看