Python

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

2018-10-03  本文已影响20人  cook__

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')]
上一篇下一篇

猜你喜欢

热点阅读