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 Matplotlib库入门指南
May 18 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
Python hashlib模块加密过程解析
Nov 05 Python
python路径的写法及目录的获取方式
Dec 26 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python图片灰度化处理的几种方法
Jun 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
解析link_mysql的php版
2013/06/30 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
python简单实现旋转图片的方法
2015/05/30 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
Python实现求数列和的方法示例
2018/01/12 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
数学兴趣小组活动总结
2014/07/08 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
义诊活动总结
2015/02/04 职场文书
2015年国庆节寄语
2015/08/17 职场文书
素质教育培训心得体会
2016/01/19 职场文书
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
maven依赖的version声明控制方式
2022/01/18 Java/Android
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android