浅谈对zip()与zip(*)的使用与理解

  • zip() 将多个列表中的相对应位置上的元素进行组合(输入参数>=1)

 1.假设有2个列表:均存储的是单一元素

A = ['a1','a2','a3','a4','a5']

B = ['b1','b2','b3','b4','b5']

test = [t for t in zip(A,B)]

print(test) # [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3'), ('a4', 'b4'), ('a5', 'b5')]

 2.假设有2个列表:存储若干元组,元组中的元素类型相同

A = [(1,2),(3,4)]

B = [(5,6),(7,8)]

test = [t for t in zip(A,B)]

print(test) # [((1, 2), (5, 6)), ((3, 4), (7, 8))]

  3.假设有2个列表:存储若干列表,列表中的元素类型相同

A = [[1,2],[3,4]]

B = [[5,6],[7,8]]

test = [t for t in zip(A,B)]

print(test) # [([1, 2], [5, 6]), ([3, 4], [7, 8])]

  4.假设有2个列表:存储若干元组,元组中的元素类型相同,但存储的个数不同

A = [(1,2),(3,4)]

B = [(5),(7)]

test = [t for t in zip(A,B)]

print(test) # [((1, 2), 5), ((3, 4), 7)]

   5.假设有2个列表:一个存储若干元组,一个存储若干列表,元素类型相同,存储个数相同

B = [[5,6],[7,8]]

A = [(1,2),(3,4)]

test = [t for t in zip(A,B)]

print(test) # [((1, 2), [5, 6]), ((3, 4), [7, 8])]

   6.假设有2个列表:一个存储若干元组,一个存储若干列表,列表中元素的类型不同,存储的个数也不同

A = [(1,2),(3,4)]

B = [[5,'b1','b2'],[7,'b3']]

test = [t for t in zip(A,B)]

print(test) # [((1, 2), [5, 'b1', 'b2']), ((3, 4), [7, 'b3'])]

7.假设只有一个列表 (没啥意义)

A = ['a1','a2','a3','a4','a5']

test = [t for t in zip(A)]

print(test) # [('a1',), ('a2',), ('a3',), ('a4',), ('a5',)]

 8.假设有2个列表 ,但长度不同

A = ['a1','a2','a3','a4','a5']

B = ['b1','b2','b3','b4']

test = [t for t in zip(A,B)]

print(test) # [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3'), ('a4', 'b4')]

 结论:不管输入到zip()中的列表,存储的元素个数或类型是否相同,均能把各个列表中相同的位置处的值进行组合;如果多个列表间长度不相同,则以最短的那个为准;

  •  zip(*) 将一个复合列表中的若干列表或元组上的对应位置上的元素组合到一起

 这里的列表通常指的是一个复合列表,即一个列表中包含了若干个列表或元组,比如:

A = [1,2,3,4] 

B = [5,6,7,8]

C = []

C.append(A)

C.append(B)

这里的C就是一个复合列表

 现有A,B,2个列表,以及加入了A,B两个列表的复合列表C,

A = ['a1','a2','a3','a4','a5']
#
B = ['b1','b2','b3','b4','b5']
C = []
C.append(A)
C.append(B)

注意:zip((A,B)) 与 zip(*(A,B))、zip(*C)的结果

从下面的代码可以看出,zip(*(A,B)) 与 zip(*C)的结果是一样的

对于 zip(*(A,B))可以理解为:先将A,B2个列表给取出来,然后再将其相对应位置上的元素组合

对于 zip(*C):道理类同zip(*(A,B))

对于 zip((A,B)):这里是A,B作为一个整体,并没有把A,B给分别取出来再组合,与上述第7个案列相同;

A = ['a1','a2','a3','a4','a5']

B = ['b1','b2','b3','b4','b5']

C = []
C.append(A)
C.append(B)

#[(['a1', 'a2', 'a3', 'a4', 'a5'],), (['b1', 'b2', 'b3', 'b4', 'b5'],)]
test = [t for t in zip((A,B))] 

# [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3'), ('a4', 'b4'), ('a5', 'b5')]
test1 = [t for t in zip(*(A,B))]

# [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3'), ('a4', 'b4'), ('a5', 'b5')]
test2 = [t for t in zip(*(C))]

final = [A,B,C,D,E...] 

结论:zip(*(final)):把final中的A,B,C,D,E等多个列表给单独取出来,然后进行zip(A,B,C,D,E....)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值