描述
zip函数可以将多个序列(列表、元组、字典、集合、字符串以及 range() 区间构成的列表)“压缩”成一个 zip 对象。所谓“压缩”,其实就是将这些序列中对应位置的元素重新组合,生成一个个新的元组。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
语法
zip([iterable, …], [iterable, …])
参数解释
[iterable, …], [iterable, …]:表示一个或多个迭代器
示例
示例1 zip压缩多个列表
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
示例2 zip压缩多个字符串
>>>strs1 = "flower"
>>>strs2 = "flow"
>>>strs3 = "flight"
>>>print(list(zip(strs1, strs2)))
>>>print(list(zip(strs2, strs3)))
[('f', 'f'), ('l', 'l'), ('o', 'o'), ('w', 'w')]
[('f', 'f'), ('l', 'l'), ('o', 'i'), ('w', 'g')]
示例3 zip(*)
>>>strs = ["flower", "flow", "flight"]
>>>print(list(zip(*strs)))
[('f', 'f', 'f'), ('l', 'l', 'l'), ('o', 'o', 'i'), ('w', 'w', 'g')]
示例4 利用zip(*)返回矩阵每列的最大值
# 返回矩阵的行列最大值
grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
rowMax = list(map(max, grid)) #返回[8,7,9,3]
colMax = list(map(max, zip(*grid))) #返回[9,4,8,7]