Python中zip()函数的解释和可视化(实例详解)


Posted in Python onFebruary 16, 2020

Python中zip()函数的解释和可视化(实例详解)

zip()的作用

先看一下语法:

zip(iter1 [,iter2 [...]]) —> zip object

Python的内置help()模块提供了一个简短但又有些令人困惑的解释:

返回一个元组迭代器,其中第i个元组包含每个参数序列或可迭代对象中的第i个元素。当最短的可迭代输入耗尽时,迭代器将停止。使用单个可迭代参数,它将返回1元组的迭代器。没有参数,它将返回一个空的迭代器。

与往常一样,当您精通更一般的计算机科学和Python概念时,此模块非常有用。但是,对于初学者来说,这段话只会引发更多问题。让我们尝试通过示例,代码片段和可视化来解释zip()功能:从许多迭代中获取元素,然后…… 放在一起

我们可以通过几个列表来演示zip()的功能:

uppercase = ['A', 'B', 'C']
lowercase = ['a', 'b', 'c']

for x, y in zip(uppercase, lowercase):
 print(x, y)

输出:

A a B b C c

但是,不限于两个可迭代对象作为参数传递-我们可以添加任意多个:

uppercase = ['A', 'B', 'C']
lowercase = ['a', 'b', 'c']
numbers = [1, 2, 3]

for x, y, z in zip(uppercase, lowercase, numbers):
 print(x, y, z)

这将输出:

A a 1 B b 2 C c 3

让我们直观地看一下该zip()函数在Python中的工作方式:

Python中zip()函数的解释和可视化(实例详解)

zip()函数的另一个重要警告是如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同:

uppercase = ['A', 'B', 'C', 'D', 'E']
lowercase = ['a', 'b', 'c', 'd']
numbers = [1, 2, 3]

for x, y, z in zip(uppercase, lowercase, numbers):
 print(x, y, z)

输出:

A a 1 B b 2 C c 3

正如我们所看到的,即使列出了三个三元组,uppercase和lowercase列表具有5和4个元素。

要知道的重要一件事是zip()函数返回什么。

尽管似乎在调用此函数时会得到一个列表,但实际上它返回一个称为zip object的特殊数据类型,这意味着使用索引将无法浏览,下面我们学习如何将其转换为其他数据类型(例如列表)。

在此之前,我们还应再来学习一下迭代(Iteration)、迭代器对象(iterable)、迭代器(iterator )的概念:

  • Iteration是计算机科学的通用术语。它是指对一组元素执行一项操作,一次执行一个元素。一个很好的例子是循环 -它适用于每个单独的项目,直到整个项目集运行完毕为止。
  • Iterable是可以遍历的对象(译者注:在Python中所有东西都是object, 比如说变量,容器,类),iterable是可以产生iterator的object。
  • iterator是表示数据流的对象,它一次返回一个元素的数据。它还会记住其在迭代过程中的位置。本质上,它控制应如何迭代可迭代对象。

将zip()对象转换为列表(并使用索引)

zip()函数返回一个zip对象(类似于map()操作方式)。

zip对象提供了一些有趣的功能(迭代速度比list更快),但是我们经常需要将其转换为list。为了做到这一点,我们需要调用list()函数:

b = ["red", "green", "blue"]
c = ["leopard", "cheetah", "jaguar"]

print(list(zip(b, c)))

输出:

[('red', 'leopard'), ('green', 'cheetah'), ('blue', 'jaguar')]

list()函数将zip对象转换为一个元组列表。我们可以使用索引浏览各个元组。出于可读性考虑,我们首先将新列表分配给一个变量:

b = ["red", "green", "blue"]
c = ["leopard", "cheetah", "jaguar"]
new_list = list(zip(b, c))
print(new_list[0])
print(new_list[1])
print(new_list[2])

这将输出:

('red', 'leopard') ('green', 'cheetah') ('blue', 'jaguar')

将zip()对象转换成字典

另外,该dict()函数可用于将zip对象转换为字典。需要注意的是,只能使用两个zip()参数-前者产生key,后者产生value:

b = ["red", "green", "blue"]
f = ["strawberry", "kiwi", "blueberry"]

print(dict(zip(b, f)))

输出:

{'red': 'strawberry', 'green': 'kiwi', 'blue': 'blueberry'}

解压列表

在某些情况下,我们需要执行相反的操作——解压迭代器。解压操作涉及将压缩后的元素恢复为其原始状态。为此,我们添加*运算符到函数调用中。例:

a = [1, 2, 3]
b = [4, 5, 6]
zipped = zip(a, b)
list(zipped)

a2, b2 = zip(*zip(a, b))
print(a == list(a2) and b == list(b2))

输出:

True

Zip与列表生成式(for循环潜在问题)

zip()函数与Python中的for循环一起使用的可视化

Python中zip()函数的解释和可视化(实例详解)

在应用for循环后注意缺少的元素!

Python的另一个很棒的功能——列表推导式,可以与zip()函数结合使用。表面上看起来很简单……

m = ["mind", "mouse", "mini"]
n = ["norm", "night", "necklace"]

[print(a, b) for a, b in zip(m, n)]

输出:

mind norm mouse night mini necklace

看起来很简单,似乎没有任何错误,对吗?是的

如果我们想a从列表生成式获取参数并打印出来,我们得到a NameError的报错提示,这是完全正常的,因为a在列表推导之外不是实数:

Traceback (most recent call last): File "C:\Pro\Py\tp-ex\tmp1.py", line 5, in print(a) NameError: name 'a' is not defined

但是,如果我们决定使用for循环而不是列表生成式,然后打印a,我们会得到一些奇怪的结果。请记住,for循环输出的结果与列表生成式的结果相同。

m = ["mind", "mouse", "mini"]
n = ["norm", "night", "necklace"]

for m, n in zip(m, n):
 print(m, n)
print(m)

结果输出是…

mind norm mouse night mini necklace mini

等等,叛逆的mini在这里干什么?事实证明,m先前引用的列表变量"mind", "mouse", "mini"被覆盖了!因此,应该牢记列表生成式和for循环的运行方式完全不同。

结论

好吧,事实证明,zip()函数在 Python 中确实有一些窍门!?与往常一样,鼓励大家实际使用我们的代码示例,而不仅是阅读本文。如果您与代码进行交互并对其进行调整,则肯定会遇到一些独特的问题-解决它们将帮助大家更好地掌握知识。

翻译:爱学习的胡同学原文:

 Python中zip()函数的解释和可视化(实例详解)

总结

以上所述是小编给大家介绍的Python中zip()函数的解释和可视化(实例详解),希望对大家有所帮助!

Python 相关文章推荐
python base64 decode incorrect padding错误解决方法
Jan 08 Python
pygame学习笔记(4):声音控制
Apr 15 Python
django框架如何集成celery进行开发
May 24 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
关于Django外键赋值问题详解
Aug 13 Python
python使用super()出现错误解决办法
Aug 14 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
python 输出上个月的月末日期实例
Apr 11 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
opencv实现简单人脸识别
Feb 19 Python
python爬虫筛选工作实例讲解
Nov 23 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 #Python
使用Tensorboard工具查看Loss损失率
Feb 15 #Python
Keras使用tensorboard显示训练过程的实例
Feb 15 #Python
Python利用逻辑回归分类实现模板
Feb 15 #Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 #Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 #Python
tensorboard显示空白的解决
Feb 15 #Python
You might like
晶体管来复再生式二管收音机
2021/03/02 无线电
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
php中数组最简单的使用方法
2020/12/27 PHP
javascript 继承实现方法
2009/08/26 Javascript
Javascript 二维数组
2009/11/26 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
python操作xml文件详细介绍
2014/06/09 Python
python中global用法实例分析
2015/04/30 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
基于python实现简单日历
2018/07/28 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
学生会主席事迹材料
2014/01/28 职场文书
财务部总监岗位职责
2014/03/12 职场文书
2014年部门工作总结
2014/11/12 职场文书
小学生毕业评语
2014/12/26 职场文书
教师岗位说明书
2015/09/30 职场文书
护士心得体会范文
2016/01/25 职场文书
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技