python中的zip()函数
定义和用法
zip() 函数返回 zip 对象,它是元组的迭代器,其中每个传递的迭代器中的第一项配对在一起,然后每个传递的迭代器中的第二项配对在一起,依此类推。
如果传递的迭代器具有不同的长度,则项目数最少的迭代器将决定新迭代器的长度。
- 当zip()函数中只有一个参数时,zip(iterable)从迭代器中依次取一个元组,组成一个元组。
- 当zip()函数有两个参数时,zip(a,b)函数分别从a和b中取一个元素组成元组,再次将组成的元组组合成一个新的迭代器。a与b的维数相同时,正常组合对应位置的元素。当a与b行或列数不同时,取两者中的最小的行列数。
1 a=[1,2,3] 2 b=['A','B','C'] 3 c=['x','y'] 4 #zip()函数单个参数 5 zip_1=zip(a) 6 #zip()函数有两个参数 7 zip_2=zip(a,b) 8 #当传递参数长度不一样时候,以短的为标准 9 zip_3=zip(a,b,c) 10 print(zip_1) ##zip对象 <zip object at 0x00000147C9257AC8> 11 print(list(zip_1))##输出列表 [(1,),(2,),(3,)] 12 print(list(zip_2))##输出列表 [(1, 'A'), (2, 'B'), (3, 'C')] 13 print(list(zip_3))##输出列表 [(1,'A','x'),(2,'B','y')]
- 与zip()相反,zip(*)可以理解为解压,返回组成列表的一个个的元组。*zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。
1 a=['1','2','3'] 2 b=['A','B','C'] 3 c=['x','y'] 4 zip_3=zip(a,b,c) 5 x,y,z=zip(*zip_3) 6 print(x,y,z)##输出('1','2')('A','B')('x','y')
应用
- 矩阵相加减、点乘(也可以用for循环+列表推导式实现)
1 m=[[1,2,3],[4,5,6],[7,8,9]] 2 n=[[1,1,1],[2,2,2],[3,3,3]]
3 #点乘 4 print([x*y for a, b in zip(m, n) for x, y in zip(a, b)]) ##输出[1,2,3,8,10,12,21,24,27]
5 #加减
6 print([x+y for a, b in zip(m, n) for x, y in zip(a, b)]) ##输出[2,3,4,6,7,8,10,11,12]