【Python】 zip() 、zip(*) 与*zip()函数

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可以实现更多矩阵的操作
  1. 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)]
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值