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

本文实例讲述了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)

打印结果如下

at 0x1052ec2b0>

at 0x1052ec468>

at 0x1052ec4c0>

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

sum = sum + i

i += 1

yield(sum)

print(type(fib(10)))

for x in fib(10):

print(x)

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

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

Generator 的工作原理,是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。

对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

python 生成器可参考 https://www.jb51.net/article/63929.htm

以下实例使用 yield 实现斐波那契数列

#!/usr/bin/python3

import sys

def fibonacci(n): # 生成器函数 - 斐波那契

a, b, counter = 0, 1, 0

while True:

if (counter > n):

return

yield a

a, b = b, a + b

counter += 1

f = fibonacci(10) # f 是一个迭代器,由生成器返回生成

while True:

try:

print (next(f), end=" ")

except StopIteration:

sys.exit()

迭代器 iterator

迭代器是访问集合元素的一种方式

迭代器有两个方法,生成迭代器 iter(),返回迭代器的下一个项目 next()

迭代器对象从集合的第一个元素开始访问,知道所有元素被访问结束。迭代器只能往前,不能回退。

字符串、列表、元组 都可以用于创建迭代器

迭代器 iterator 和可迭代对象 iterable 的区别在于:

可以直接作用于for循环的对象统称为可迭代对象:Iterable,list、tuple、dict、set、str、Generator 等等。

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

使用 iter 创建迭代器

list、dict、str等数据类型不是Iterator,但是可以通过 iter() 来创建迭代器

list=[1,2,3,4]

it = iter(list) # 创建迭代器对象

print (next(it)) # 输出迭代器的下一个元素

1

print (next(it))

2

Python迭代器 Iterator 可参考:https://www.jb51.net/article/128183.htm

附:廖学峰Python相关资料下载:

廖雪峰 Python2.7 教程 PDF版:https://www.jb51.net/books/536707.html

廖雪峰 python3 教程(带标签完整版):https://www.jb51.net/books/536708.html

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

本文标题: Python3中的列表生成式、生成器与迭代器实例详解

本文地址: http://www.cppcns.com/jiaoben/python/229991.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值