栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python列表生成式、生成器、可迭代对象与迭代器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python列表生成式、生成器、可迭代对象与迭代器

  • 列表生成式
L1 = [x*x for x in range(1,11)]
print('L1:',L1)
L3 = [m+n for m in 'ABC' for n in 'abc']
print('L3:',L3)
d = {'x': 'A', 'y': 'B', 'z': 'C' }
L4 = [key+ '=' +value for key,value in d.items()]
print('L4:',L4)
L2 = [x*x for x in range(1,11) if x%2==0]
print('L2:',L2)
L5 = [x if x%2==0 else -x for x in range(1,11)]
print('L5:',L5)

  • 生成器:generator

一边计算一边循环,不用直接生成整个列表。可以用next(g)不断获取g的下一个元素,但一般用for循环。

g =(x*x for x in range(1,11))
g
Out[10]:  at 0x000001F67AF6A120>
next(g)
Out[11]: 1
next(g)
Out[12]: 4
for n in (g):
    print(n)
    
9
16
25
36
49
64
81
100

generator函数:如果一个函数中包含yield关键字,此函数为generator函数,调用generator函数,生成一个generator对象。generator函数和普通函数的执行流程不一样。普通函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

"""斐波拉契数列"""
def f(max):
    n,a,b=0,0,1
    while n < max:
       yield b 
       a, b = b, a + b
       n = n + 1
    return 'done'
o = f(6)
o
Out[16]: 
for x in o:
    print(x)
    
1
1
2
3
5
8

每次调用generato函数都会生成一个独立的generator,需要注意。

"""杨辉三角"""
def triangles():
    arr= [1]
    while True:
        yield arr
        'arr = [1] + [arr[n]+arr[n+1] for n in range(len(arr)-1)] + [1]'
        arr = [1] + [m + n for m, n in zip(arr[:-1],arr[1:])]+[1]
n = 0
results = []
for t in triangles():
    results.append(t)
    n = n + 1
    if n == 10:
        break

for t in results:
    print(t)

if results == [
    [1],
    [1, 1],
    [1, 2, 1],
    [1, 3, 3, 1],
    [1, 4, 6, 4, 1],
    [1, 5, 10, 10, 5, 1],
    [1, 6, 15, 20, 15, 6, 1],
    [1, 7, 21, 35, 35, 21, 7, 1],
    [1, 8, 28, 56, 70, 56, 28, 8, 1],
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]:
    print('测试通过!')
else:
    print('测试失败!')

  •  可迭代对象与迭代器

可迭代对象:直接作用于for循环的对象统称为可迭代对象。一类是集合数据类特型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。

迭代器:生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,而上述的list、tuple、dict、set、str等不是,无法调用next()函数。可以通过iter()函数获得一个Iterator对象。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号