Python版本: Python3.7
运行平台: Mac OS
IDE: Anaconda: jupyter notebook

一、zip()函数理解

   从参数中的多个迭代器取元素组合成一个新的迭代器,新的迭代器默认是元组。。
   zip()括号里必须是(元组、列表、字典等)迭代器。

1、zip()函数中只有一个参数时

a = [1, 2, 3, 4]
b = zip(a)
print(\"zip()函数的返回类型:\", type(b))
print(\"zip对象转化为列表:\", list(b))

运行结果如下:

\'\'\'
zip()函数的返回类型: <class \'zip\'>     #可以看到zip函数返回的是对象,需要转换成列表。
zip对象转化为列表: [(1,), (2,), (3,), (4,)]     #不知道为啥有个有个逗号。
\'\'\'

2、zip()函数中有两个参数时

   a.先看下一维数组

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9, 10]
print(\"行与列相同:\", list(zip(a, b)))
print(\"行与列不同:\", list(zip(a, c)))

运行结果如下:

\'\'\'
行与列相同: [(1, 4), (2, 5), (3, 6)]  #从a和b依次各取出一个元素组成元组,再将依次组成的元组组合成一个新的迭代器。
行与列不同: [(1, 7), (2, 8), (3, 9)]  #从a和b依次各取出一个元素组成元组,多的就去掉,不进行组合。
\'\'\'

   b.在看下二维数组

a = [[1, 2, 3],  [4, 5, 6],  [7, 8, 9]]
b = [[2, 2, 2],  [3, 3, 3],  [4, 4, 4]]
c = [[2, 2, 2],  [3, 3, 3]]
print(\"行与列相同:\", list(zip(a, b)))
print(\"行与列不同:\", list(zip(a, c)))

运行结果如下:原理类似。

\'\'\'
行与列相同: [([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3]), ([7, 8, 9], [4, 4, 4])]
行与列不同: [([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3])]
\'\'\'

二、*zip()函数理解

   *zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。

a = [[1, 2, 3],  [4, 5, 6],  [7, 8, 9]]
b = [[2, 2, 2],  [3, 3, 3],  [4, 4, 4]]
c = [[2, 2, 2],  [3, 3, 3]]
print(\"行与列相同:\", *zip(a, b))
print(\"行与列不同:\", *zip(a, c))

运行结果如下:

\'\'\'
行与列相同: ([1, 2, 3], [2, 2, 2]) ([4, 5, 6], [3, 3, 3]) ([7, 8, 9], [4, 4, 4]) #三个元组
行与列不同: ([1, 2, 3], [2, 2, 2]) ([4, 5, 6], [3, 3, 3])
\'\'\'

  看下是否可逆。

a = [[1, 2, 3],  [4, 5, 6],  [7, 8, 9]]
b = [[2, 2, 2],  [3, 3, 3],  [4, 4, 4]]
c = [[2, 2, 2],  [3, 3, 3]]

a,b=zip(*zip(a, b))
print(\'a=\',a)
print(\'b=\',b)

运行结果如下:结果可逆。

\'\'\'
a= ([1, 2, 3], [4, 5, 6], [7, 8, 9])  #元组格式
b= ([2, 2, 2], [3, 3, 3], [4, 4, 4])
\'\'\'
收藏 打印