zoukankan      html  css  js  c++  java
  • 列表解析与生成器

    1、语法

      [返回值 for 元素 in 可迭代对象 if 条件]

      使用中括号[],内部是for循环,if条件语句可选

      返回一个新列表

     进阶:

        [expr for i in iterable for j in iterable2]

      等价于:

        ret=[]

        for i initerable1:

          for j in iterable2:

            ret.append(expr)

    例:

      lst=[(x,y) for x in 'abcde' for y in range(3)]

      lst=["{}*{}={}".format(j,i,i*j)for i in range(1,10) for j in range(1,10)if i>=j]

    2、生成器(***

      表达式Generator expression

        语法:(返回值 for 元素  in  可迭代对象  if 条件)

          列表解析式的中括号换成小括号就行了

          返回一个生成器

        与列表解析式的区别

          生成器表达式是按需计算(或称惰性求值,延迟计算),需要的时候才计算值

          列表解析式是立即返回值

          生成器生成的可迭代对象只能迭代一次,列表解析式的迭代对象可以反复迭代

          生成器生成的可迭代对象可以用next(),next()可以一个个取生成的迭代对象里面的值

          生成器本省并没有返回任何值,只返回了一个生成器对象

          列表解析式构造并返回了一个新的列表

           

    3、集合解析式

       语法:{返回值for 元素 in 可迭代对象 if 条件}

          列表解析式的中括号换成大括号{}就行了

          立即返回一个集合

    4、字典解析式

      语法:{返回值 for 元素 in 可迭代对象 if 条件}

        列表解析式的中括号换成大括号{}就行了

        使用key:value形式

        立即返回一个字典

    例:{str(x):y for x in range(3) for y in range(4)}

    等价于:

      ret={}

      for x in range(3):

        for y in range(4):

          ret[str(x)]=y

    例:

      试着用解析式的方法完成九九乘法:

      

    print('
    '.join([' '.join(['%s*%s=%-3s'%(x,y,y*x)for x in range(1,y+1)]) for y in range(1,10)]))
    [print('{}*{}={:<3}{}'.format(j,i,i*jk,' ' if i==j else ' '),end=" ")for i in
    range(1,10)for j in range(1,i+1)]
  • 相关阅读:
    node.js
    Ajax常见面试题
    CF932E Team Work
    斯特林数
    UOJ #62. 【UR #5】怎样跑得更快
    洛谷 P4593 【[TJOI2018]教科书般的亵渎】
    洛谷 P4321 【随机漫游】
    洛谷 P4707 【重返现世】
    洛谷 P3175 [HAOI2015]按位或
    CF Gym101933K King's Colors
  • 原文地址:https://www.cnblogs.com/mapone/p/12052944.html
Copyright © 2011-2022 走看看