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)]
  • 相关阅读:
    Educational Codeforces Round 10 C. Foe Pairs 水题
    Educational Codeforces Round 10 B. z-sort 构造
    CDOJ 1048 Bob's vector 三分
    Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
    第14届电子科大初赛民间盗版部分题目题解
    HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
    HDU 5653 Bomber Man wants to bomb an Array. dp
    HDU 5652 India and China Origins 二分+并查集
    HDU 5651 xiaoxin juju needs help 数学
    HDU 5650 so easy 数学
  • 原文地址:https://www.cnblogs.com/mapone/p/12052944.html
Copyright © 2011-2022 走看看