列表解析与生成器

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)

例:

扫描二维码关注公众号,回复: 8331921 查看本文章

  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('\n'.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,'\n' if i==j else ' '),end=" ")for i in
range(1,10)for j in range(1,i+1)]

猜你喜欢

转载自www.cnblogs.com/mapone/p/12052944.html