首页 > 编程 > Python > 正文

Python3中的列表生成式、生成器与迭代器实例详解

2020-02-15 21:46:59
字体:
来源:转载
供稿:网友

本文实例讲述了Python3中的列表生成式、生成器与迭代器。分享给大家供大家参考,具体如下:

列表生成式

Python内置的一种极其强大的生成列表 list 的表达式。返回结果必须是列表。

基本语法:

[ 变量表达式 for 变量 in 表达式 ]

示例

a = [x ** 2 for x in range(1, 10)]b = [x * x for x in range(1, 11) if x % 2 == 0]c = [m + n for m in 'ABC' for n in '123']d = {'Java': "99", 'C': "99", 'C++': "99"}L = [k + '=' + v for k, v in d.items()]print(a)print(b)print(c)print(L)

通过列表生成式,可以直接创建一个列表,但是,受到内存的限制,列表容量是有限的,当列表元素很大的时候,会很浪费内存空间。所以可以通过生成器 Generator 生成。

生成器 Generator

Generator 是一种一边循环一边计算的机制。

应用场景:只需要获得 list 中的前几个元素,节省存储空间。

使用 () 创建列表生成器

把列表生成式的中括号 [] 修改为圆括号即可 ()

a = (x ** 2 for x in range(1, 10))b = (x * x for x in range(1, 11) if x % 2 == 0)c = (m + n for m in 'ABC' for n in '123')d = {'Java': "99", 'C': "99", 'C++': "99"}L = (k + '=' + v for k, v in d.items())print(a)print(b)print(c)print(L)

打印结果如下

<generator object <genexpr> at 0x1052ec2b0>
<generator object <genexpr> at 0x1052ec468>
<generator object <genexpr> at 0x1052ec4c0>
<generator object <genexpr> at 0x1052ec518>

使用 next 调用元素:

print(a.__next__())print(a.__next__())print(a.__next__())print(a.__next__())

next 方法会一个个的返回元素值,调用一次,返回一次下一个位置的元素。
该方法在没有元素可以调用的时候,会返回 StopIteration 的错误

使用循环调用元素

for i in a:  print(i)

该方法的好处,是不会返回 StopIteration 的错误

yield 关键字 创建 Generator

如果一个函数包含了yield 关键字,那么该函数就不再是普通的函数,而是一个生成器 Generatior。

print(sum) 修改为 yield(sum),即将原来的函数,修改为了生成器。

def fib(n):  sum = 0  i = 0  while (i<n):    sum = sum + i    i += 1    yield(sum)print(type(fib(10)))for x in fib(10):  print(x)

包含 yield 语句的函数会被特定的编译成生成器。可以吧生成器理解为迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表