暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python推导式

糟老头修炼记 2020-01-27
203

Python推导式:推导式是可以从一个数据序列构建另一个新的数据序列的结构体



生成器推导式:生成器推导式的结果是一个生成器对象,使用()

列表(list)推导式:用来快速生成包含多个随机数的列表,使用[]

字典(dict)推导式:字典推导和列表推导的使用方法类似,使用{}

集合(set)推导式: 列表推导的使用方法类似,使用{}

1.生成器推导式:生成器推导式使用圆括号

生成器推导式的结果是一个生成器对象,而不是列表,也不是元组

使用生成器对象的元素时,不管使用哪种方法访问其元素,当所有元素访问结束以后,如果需要重新访问其元素,必须重新创建该生成器对象

    >>>g=((i+2)**2 for i in range(10))
    >>>g
    <generator object<genexpr> at 0x01E6AE70>
    >>>tuple(g) #转化为元组
    (4, 9,16, 25, 36, 49, 64, 81, 100, 121)
    >>>tuple(g) 元素已经遍历结束
    ()


      >>>g=((i+2)**2 for i in range(10))    #重新创建
      >>>list(g) #转化为列表
      [4, 9,16, 25, 36, 49, 64, 81, 100, 121]
      >>>g=((i+2)**2 for i in range(10)) #重新创建
      >>>g.__next__()
      4
      >>>g.__next__()
      9
      >>>g.__next__()
      16


      2.列表(list)推导式

        >>> aList=[x*x for xin range(10)]
        >>> aList
        [0, 1, 4, 9, 16, 25, 36, 49,64, 81]
        >>>bList=['app','bpp','cpp']
        >>> cList=[w.strip()for w in bList]
        >>> cList
        ['app', 'bpp', 'cpp']


        (1).使用列表推导式实现嵌套列表的平铺:

          >>>vec=[[1,2,3],[4,5,6],[7,8,9]]
          >>> [num for elem invec for num in elem]
          [1, 2, 3, 4, 5, 6, 7, 8, 9]


          (2).过滤不符合条件的元素

            >>> aList=[-1,-2,-3,0,1,2,3,-5]
            >>> [i for i in aList if i>0]
            [1, 2, 3]


            (3).在列表推导式中使用多个循环,实现多序列元素的任意组合,并且可以结合条件语句过滤特定元素 

              >>>[(x,y) for x in range(3) for y in range(2)]
              [(0, 0), (0, 1), (1, 0),(1, 1), (2, 0), (2, 1)]
              >>>[(x,y) for x in [1,2,3] for y in [3,4,2] if x!=y]
              [(1, 3), (1, 4), (1, 2),(2, 3), (2, 4), (3, 4), (3, 2)]


              (4).使用列表推导式实现矩阵转置

                >>>[(x,y) for x in [1,2,3] for y in [3,4,2] if x!=y]
                [(1,3), (1, 4), (1, 2), (2, 3), (2, 4), (3, 4), (3, 2)]
                >>>a=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
                >>>[[row[i] for row in a] for i in range(4)]
                [[1, 5,9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
                >>>list(zip(*a))
                [(1, 5, 9), (2, 6, 10),(3, 7, 11), (4, 8, 12)]


                (5.)列表推导式中可以使用函数或复杂表达式

                  >>>def f(v):
                  if v>0:
                  v**2
                  if v<0:
                  v
                  return v

                  >>>print([f(v) for v in [2,3,-7,-9,-8] if v>0])
                  [2, 3]


                  (6).列表推导式支持文件对象迭代

                    >>>fp=open('D:\file.txt','r')
                    >>>print([linefor line in fp])
                    >>> fp.close()


                     

                    3.字典推导式和列表推导式的使用方法类似,使用大括号

                      >>> m={'a':1,'b':2}
                      >>> m_frequency={v:k for k,v inm.items()}
                      >>> m_frequency
                      {1: 'a', 2: 'b'}


                      文章转载自糟老头修炼记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论