zip函数的讲解与简单应用

zip函数,看的话都应该认识这是压缩的意思,但是怎么用呐?

这里写目录标题

  • zip函数的用法
  • zip(*zipped)的应用
  • zip函数的具体应用

zip函数的用法

zip是用来压缩的,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表),或是dict(字典)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。直接用代码做示例吧

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = dict(zip(a, b))
d = list(zip(a, b))

他们的输出分别是

{
     1: 'a', 2: 'b', 3: 'c'}
[(1, 'a'), (2, 'b'), (3, 'c')]

但是字典压缩的内容只能是两个,列表却可以很多

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = ['x', 'y', 'z']
d = list(zip(a, b, c))

输出

[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]

如果转为列表就会报错
转换时是以最短的为主,如下面的

a = [1, 2, 34]
b = ['a', 'b', 'c']
d = list(zip(a, b))

他的输出仍然是

[(1, 'a'), (2, 'b'), (3, 'c')]

zip(*zipped)的应用

有了压缩,肯定少不了解压缩,在python中,对zip函数的解压缩就是*zip函数,解压缩并非时返回原来的两个列表,而是返回一个列表,之前的内容被定义为元组类型

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = ['x', 'y', 'z']
d = list(zip(a, b, c))
print(list(zip(*d)))

输出结果就会时

[(1, 2, 3), ('a', 'b', 'c'), ('x', 'y', 'z')]

转化时并不能让他输出为字典,因为本来就不是字典

zip函数的具体应用

zip函数在实际上也是十分好用的,就比如矩阵中
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
对他进行矩阵的行列互换,的确用迭代的方法也可以
print [ [row[col] for row in a] for col in range(len(a[0]))]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
但是我们如果用zip函数的话就更简单了

x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
zip(*x)

输出结果为
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
此时再用map函数转化为列表既可以

map(list,zip(*a))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

在力扣中做题时,zip函数也可以省不少力气
例如:https://blog.csdn.net/qq_51718832/article/details/109340822

你可能感兴趣的:(python,python)