python zip函数可以实现同时遍历多列表,以及矩阵转置等
zip 函数是Python的内置函数,用于将多个可迭代对象中对应位置的元素打包成元组,并返回一个由这些元组组成的迭代器。
概念看不懂没关系,我们来举个简单例子。
比如有两个列表x=["a","b","c","d","e"],y=[1,2,3,4,5]。 这两个列表中的元素是对应关系。如果我们要把这种对应关系输出,要怎么做呢?
传统做法是:
for i in range(len(x)):
print(x[i],y[i])
我们再来看看用zip怎么实现。代码写成:
for a,b in zip(x,y):
print(a,b)
这样就可以了。 这里zip把x和y列表对应位置的元素打包成了元组,也就是(a,2), (b,3)这样的形式。
通过这个例子,大家应该可以理解zip是干嘛用的了。那zip有哪些特点呢?
第一, zip的参数可以是任意的可迭代对象。比如列表,元组,字符串等等都是可以的。比如我们把x改成字符串,也没什么问题。
第二, zip可以操作任意数量的参数。比如我们再增加一个z字符串,也加入到zip里,打印结果里也包含了z的字符。
第三, 当输入的可迭代对象长度不一致时, zip 函数默认以最短的可迭代对象的长度为准,忽略其他对象超出的部分。
第四, zip函数返回的是一个迭代器,只能遍历一次。比如我们把zip提出来,然后再加一个循环,后面的循环是没有任何输出的。如果需要多次使用,需要先转换为列表或元组等序列类型。比如用list把zip转成列表,这样后面的循环就有输出了。
要注意,如果只需遍历一次,那不建议转成列表,因为列表会一次性存储所有打包后的元组,在处理大的迭代对象时,可能会占用大量内存。
zip一般用在哪些地方呢?常见应用场景比如:
- 同时遍历多个列表:我们前面这个例子,就是同时遍历了多个列表。
配合星号,把多维元组或列表反向“解压”成两个元组。前面的例子里m是个列表,为方便大家理解,我直接把输出复制过来赋值给x。再用zip星号来解压,用list转成列表,输出看下。其实这也就是实现了矩阵的转置。了解矩阵的朋友可以对比一下前后矩阵。
- 创建字典:将两个列表合并为键值对的字典,比如这里,用dict函数把x,y组合成字典。
关于zip函数的介绍就到这里,大家赶紧动手操作试下吧。