Python中zip()函数的解释和可视化但又一次有些令人困惑地解释:返回元组的迭代器,其中第i个元组包含每个参数序列或可迭代项中的第i个元素。当最短的可迭代输入耗尽时,迭代器停止。使用单个可迭代参数,它将返回1元组的迭代器。没有参数,它返回一个空迭代器。与往常一样,当您精通更通用的计算机科学和Python概念时,此模块非常有用。但是,对于初学者来说,这段话只会引发更多问题。让我们尝试用示例、代码片段和可视化来解释zip()的功能:从多次迭代中获取元素,然后……放在一起我们可以用几个列表来演示zip()的功能:uppercase=['A','B','C']lowercase=['a','b','c']forx,yinzip(uppercase,lowercase):print(x,y)output:AaBbCc然而,不限于作为参数传递的两个可迭代对象——我们可以添加任意多个:uppercase=['A','B','C']lowercase=['a','b','c']numbers=[1,2,3]forx,y,zinzip(uppercase,lowercase,numbers):print(x,y,z)这将输出:Aa1Bb2Cc3让我们直观地看一下zip如何()函数在Python中工作:zip()函数的另一个重要警告是,如果各个迭代器的元素数量不一致,则返回列表的长度与最短的对象相同:uppercase=['A','B','C','D','E']小写字母=['a','b','c','d']数字=[1,2,3]forx,y,zip中的z(大写,小写,numbers):print(x,y,z)输出:Aa1Bb2Cc3正如我们所见,即使列出了三个三元组,大写和小写列表都有5和4个元素。需要知道的一件重要事情是zip()函数返回什么。虽然调用这个函数看起来像是得到了一个列表,但实际上它返回的是一种特殊的数据类型,叫做zip对象,这意味着你将无法使用索引进行浏览,所以让我们学习如何将其转换为其他数据列表等类型)。在此之前,我们应该了解Iteration、iterable、iterator的概念:Iteration是计算机科学中的一个总称。它指的是对一组元素执行操作,一次一个元素。一个很好的例子是循环-它适用于每个单独的项目,直到整个项目集运行完毕。Iterable是可以遍历的对象(译者注:Python中一切都是对象,变量、容器、类等),iterable是可以生成迭代器的对象。迭代器是表示数据流的对象,它一次返回一个元素的数据。它还会记住它在迭代期间的位置。本质上,它控制着迭代器应该如何被迭代。将zip()对象转换为列表(并使用索引)zip()函数返回一个zip对象(类似于map()的操作方式)。zip对象提供了一些有趣的功能(迭代速度比列表快),但我们经常需要将其转换为列表。为此,我们需要调用list()函数:b=["red","green","blue"]c=["leopard","cheetah","jaguar"]print(list(zip(b,c)))Output:[('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()参数——前者生成键,后者生成值: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)andb==list(b2))输出:TrueZipwithlistcomprehension(for循环潜在问题)Python中与for循环一起使用的zip()函数的可视化注意应用for循环后丢失的元素!Python的另一个很酷的特性,列表理解,可以与zip()函数结合使用。表面上看起来很简单...m=["mind","mouse","mini"]n=["norm","night","necklace"][print(a,b)fora,binzip(m,n)]output:mindnormmousenightmini项链看起来很简单,好像也没什么不对吧?是的,如果我们想要a从列表推导中获取参数并将其打印出来,我们会得到一个NameError,这是完全正常的,因为a不是列表推导之外的实数:Traceback(最近一次调用最后一次):File"C:\Pro\Py\tp-ex\tmp1.py",line5,inprint(a)NameError:name'a'isnotdefined但是,如果我们决定使用for循环而不是列表理解,然后打印a,我们得到一些奇怪的结果。请记住,for循环输出与列表理解相同的结果。m=["mind","mouse","mini"]n=["norm","night","necklace"]form,ninzip(m,n):print(m,n)print(m)结果输出是...mindnormmousenightmininecklacemini等,rebelliousmini在这里做什么?原来m之前引用的列表变量“mind”、“mouse”、“mini”被覆盖了!因此,应该记住列表推导式和for循环的操作方式完全不同。结论好吧,事实证明zip()函数确实在Python中做了一些技巧!:)一如既往,我们鼓励每个人实际使用我们的代码示例,而不仅仅是阅读本文。如果您正在与代码交互并调整它,您肯定会遇到一些独特的问题-解决这些问题将帮助您更好地掌握。翻译:爱学习的胡
