时间:2021-05-23
zip()的作用
先看一下语法:
zip(iter1 [,iter2 [...]]) —> zip objectPython的内置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中的工作方式:
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 )的概念:
将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循环一起使用的可视化
在应用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()函数的解释和可视化(实例详解),希望对大家有所帮助!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言之前我们分享过用Python进行可视化的9种常见方式。其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplot
这篇文章主要介绍了python可视化text()函数使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下函
基于python代码的3D地图可视化,供大家参考,具体内容如下介绍使用Python对地图进行3D可视化。以地图为地图,可以在三维空间对轨迹、点进行可视化。库我们
使用matplotlib中的一些函数将tensorflow中的数据可视化,更加便于分析importtensorflowastfimportnumpyasnpim
本文实例为大家分享了python实现石头剪刀布的具体代码,供大家参考,具体内容如下老师布置了一个石头剪刀布的作业,要可视化,还是先用代码实现再说可视化的事。环境