1.zip()函数解释:
def zip(seq1, seq2, *more_seqs):
"""
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
Return a list of tuples, where each tuple contains the i-th element
from each of the argument sequences. The returned list is truncated
in length to the length of the shortest argument sequence.
"""
pass
zip函数的输入参数是多个(包含一个)参数序列,返回一个以元组为元素的列表
,列表第i位的元素是由每一个参数序列中的第i位构成的一个元组,且返回的列表会自动截断为参数序列的最短长度。
注:
1.参考了很多博客,大部分都写的是zip的参数序列必须是迭代器/可迭代对象。
2.zip自动截断之后,剩余的截断数据是不会被保存的,因此用*zip逆函数得到的结果也会损失掉被截断的数据。
2.用法
- 只有一个参数序列的情况
>>>a=[1,2,3]
>>>aa=zip(a)
>>>print(aa)
[(1,),(2,),(3,)]
- 两个或多个参数的情况
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>c=zip(a,b)
>>>print(a)
[(1,4),(2,5),(3,6)]
- 序列截断的情况
>>>a[1,2]
>>>b=[1,2,3]
>>>print(zip(a,b))
[(1,1),(2,2)] #以最短长度截断
-
标签与数据点对应起来,类似于字典的作用
-
用于实现矩阵的加减、点乘、转置等操作
>>>m=[[1,1],[4,5]]
>>>n=[[1,2],[2,3]]
>>>for a,b in zip(m,n):
for x,y in zip(a,b):
print(x+y)
2,3,6,8
#矩阵相加!同样根据矩阵其他的运算规则用zip可以实现更多矩阵的操作
- zip()和*操作符一起使用可以用来unzip一个列表
*zip()是zip()的逆过程
>>>a=[[1,2,3],[4,5,6],[7,8,9]]
>>>print(zip(*a))
[(1,4,7),(2,5,8),(3,6,9)] #实现了矩阵转置的功能,但由于返回列表的元素是元组,要进一步转换
>>>print(map(list,zip(*a)
[[1,4,7],[2,5,8],[3,6,9]]
#----------------
>>>a=[1,4,7]
>>>b=[2,5,8]
>>>c=[3,6,9]
>>>print(zip(*zip(a,b,c)))
[(1,4,7),(2,5,8),(3,6,9)]