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

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')]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • PYTHON-进阶-ITERTOOLS模块小结转自wklken:http://wklken.me/posts/20...
    C_Y_阅读 1,101评论 0 2
  • 本文翻译自Functional Programming Howto 本文将介绍Python中函数式编程的特性。在对...
    大蟒传奇阅读 2,684评论 4 14
  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 1,305评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • 《微交互》第一章 微交互不是功能,也不是简单动效。只适用一个任务,是产品功能的细节。是创建优秀的用户体验的必由之路...
    hellen0827阅读 752评论 0 4