python学习笔记——列表生成式与生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习笔记——列表生成式与生成器相关的知识,希望对你有一定的参考价值。

1.列表生成式(List Comprehensions)

  python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁。举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行:

1 L = []
2 for i in range(1,11):
3     L.append(i*i)

  列表生成式只用一行,前面是生成规则,后面是初始元素,最后还可以加上判断条件:

1 [i*i for i in range(1, 11)]

  列表生成式还可以实现多层循环,以及判断,刚刚的栗子再写复杂一点就成了:

[a*b for a in range(1,11) for b in range(1,11) if a==b]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 2.生成器(Generator)

  列表生成式生成的列表元素是有限的,因为列表毕竟要存储于内存中,而生成器不需要担心内存的问题。因为生成器保存的是算法,相较于列表生成式,生成器是时间换空间。

而生成器有两种创建方式:

  2.1 将列表生成式的[]换成():

1 >>> g = (x * x for x in range(10))
2 >>> g
3 <generator object <genexpr> at 0x104feab40>
4 >>> g.next()
5 0
6 >>> g.next()   #遍历也可以使用for循环,没有更多的元素时,抛出StopIteration的错误。
7 1

  2.2 利用函数实现,只需要把return语句变成yield即可,除此之外生成器是yield语句执行完后就停止,调用下一个再继续执行。

1 def fib(max):
2     n, a, b = 0, 0, 1
3     while n < max:
4         yield b
5         a, b = b, a + b
6         n = n + 1

 

以上是关于python学习笔记——列表生成式与生成器的主要内容,如果未能解决你的问题,请参考以下文章

python—day14内置函数2列表生成式与生成器表达式模块

Python学习笔记 列表生成式_生成器

Python3匿名函数字典排序生成式与生成器装饰器简介

Python学习笔记__3.3章 列表生成式

列表推导式与生成表达式的区别

生成式与生成器