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]
posted @ 2021-02-01 11:10  油菜园12号  阅读(184)  评论(0编辑  收藏  举报