zoukankan      html  css  js  c++  java
  • python中的zip()函数

    定义和用法

    zip() 函数返回 zip 对象,它是元组的迭代器,其中每个传递的迭代器中的第一项配对在一起,然后每个传递的迭代器中的第二项配对在一起,依此类推。

    如果传递的迭代器具有不同的长度,则项目数最少的迭代器将决定新迭代器的长度。

    • 当zip()函数中只有一个参数时,zip(iterable)从迭代器中依次取一个元组,组成一个元组。
    • 当zip()函数有两个参数时,zip(a,b)函数分别从a和b中取一个元素组成元组,再次将组成的元组组合成一个新的迭代器。a与b的维数相同时,正常组合对应位置的元素。当a与b行或列数不同时,取两者中的最小的行列数。
     1 a=[1,2,3]
     2 b=['A','B','C']
     3 c=['x','y']
     4 #zip()函数单个参数
     5 zip_1=zip(a)
     6 #zip()函数有两个参数
     7 zip_2=zip(a,b)
     8 #当传递参数长度不一样时候,以短的为标准
     9 zip_3=zip(a,b,c)
    10 print(zip_1) ##zip对象  <zip object at 0x00000147C9257AC8>
    11 print(list(zip_1))##输出列表  [(1,),(2,),(3,)]
    12 print(list(zip_2))##输出列表  [(1, 'A'), (2, 'B'), (3, 'C')]
    13 print(list(zip_3))##输出列表  [(1,'A','x'),(2,'B','y')]
    • 与zip()相反,zip(*)可以理解为解压,返回组成列表的一个个的元组。*zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。
    1 a=['1','2','3']
    2 b=['A','B','C']
    3 c=['x','y']
    4 zip_3=zip(a,b,c)
    5 x,y,z=zip(*zip_3)
    6 print(x,y,z)##输出('1','2')('A','B')('x','y')

    应用

    • 矩阵相加减、点乘(也可以用for循环+列表推导式实现)
    1 m=[[1,2,3],[4,5,6],[7,8,9]]
    2 n=[[1,1,1],[2,2,2],[3,3,3]]
    3 #点乘
    4 print([x*y for a, b in zip(m, n) for x, y in zip(a, b)]) ##输出[1,2,3,8,10,12,21,24,27]
    5 #加减
    6 print([x+y for a, b in zip(m, n) for x, y in zip(a, b)]) ##输出[2,3,4,6,7,8,10,11,12]
  • 相关阅读:
    java 多线程面试题
    finally语句块一定会被执行吗
    redis 数据结构
    哪些可以作为GC ROOT
    mybatis 源码分析--日志分析
    mybatis selectKey
    spring cache 和redis
    kafka是如何保证消息不被重复消费的
    kafka面试题及答案
    浅谈:2019 前端面试题
  • 原文地址:https://www.cnblogs.com/20201212ycy/p/14355621.html
Copyright © 2011-2022 走看看