美文网首页Python
zip() --同时迭代多个序列

zip() --同时迭代多个序列

作者: cook__ | 来源:发表于2018-10-03 19:20 被阅读20次

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

    xpts = [1, 5, 4, 2, 8, 10]
    ypts = [100, 121, 78, 37, 23]
    for x, y in zip(xpts, ypts):
        print(x, y)
        
    1 100
    5 121
    4 78
    2 37
    8 23
    

    zip(a, b)的工作原理是创建出一个迭代器,该迭代器可产生出元组(x, y),这里的x取自序列a, 而y取自序列b。
    当其中某个输入序列中没有元素可以继续迭代时,整个迭代过程结束。因此整个迭代的长度和其中最短的输入序列长度相同。

    实例如下:

    a = [1, 2, 3]
    b = ['w', 'x', 'y', 'z']
    for i in zip(a, b):
        print(i)
        
    (1, 'w')
    (2, 'x')
    (3, 'y')
    

    2、也可以使用itertools.zip_longest(),可以迭代出较长的序列长度

    import itertools
    for i in itertools.zip_longest(a, b):
        print(i)
        
    (1, 'w')
    (2, 'x')
    (3, 'y')
    (None, 'z')
    
    # 通过fillvalue来填充元素
    for i in itertools.zip_longest(a, b, fillvalue=0):
        print(i)
        
    (1, 'w')
    (2, 'x')
    (3, 'y')
    (0, 'z')
    

    zip()可以接受多余2个序列作为输入。在这种情况下,得到的结果中元组里的元素数量和输入序列的数量相同。

    c = ['m', 'n']
    for i in zip(a, b, c):
        print(i)
        
    (1, 'w', 'm')
    (2, 'x', 'n')
    
    注意:

    zip()创建出的结果只是一个迭代器。如果需要将配对的数据保存为列表,那么可以使用list()函数。

    print(zip(a, b))
    print(list(zip(a, b)))
    <zip object at 0x10d82fcc8>
    [(1, 'w'), (2, 'x'), (3, 'y')]
    

    相关文章

      网友评论

        本文标题:zip() --同时迭代多个序列

        本文链接:https://www.haomeiwen.com/subject/wezzoftx.html