python学习笔记 day14 生成器表达式

列表推导式

之前生成一个满足条件的列表我们可以使用for循环,然后往列表中append元素,现在可以不用那么麻烦,直接一个表达式就可以搞定:

L=['你好哇%d'% i for i in range(10)]
print(L)

规则就是: for 是控制循环变量的,前面写上你要生成的这个列表的组成元素(就是后面的循环变量的某种组合形式)

运行结果:

再比如你要生成一个0-9范围内 每个数字立方的列表,就可以这样写:

L=[i**3 for i in range(10)]
print(L)

运行结果:

生成器表达式

前面之所以先介绍列表推到式,就是因为生成器表达式跟它真的太像了!我们先来感受一下:

g=(i for i in range(5))
print(g)   # g是一个生成器
# for i in g:   #可以使用for循环一次来打印出该生成器内的值
#     print(i)
print(g.__next__())  #当然也可以使用g.__next__()方法一个一个打印该生成器内的值~
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())

运行结果:

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

如果想要使用生成器表达式得到一个生成器,要去里面的元素是0-9数字的平方:

g=(i**2 for i in range(10))
print(g)                 #生成器表达式得到的是一个生成器
# for i in g:            #可以使用for循环来获取生成器内的值
#     print(i)
print(g.__next__())      #也可以使用.__next__()方法来获取
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())

运行结果:

对比可以发下,生成器表达式和列表推导式的区别为:

1. 形式不同,列表推导式最外层采用的是 [] -中括号,而生成器表达式采用的是()---圆括号;

2. 两者的返回值不同,列表推导式返回的是一个list,而生成器表达式返回的是一个生成器,所以列表推导式一次性返回这个列表(包含列表的所有值),而生成器只有当调用__next__()方法时才会得到值,所以更节省内存空间;

猜你喜欢

转载自www.cnblogs.com/xuanxuanlove/p/9591402.html