Python学习-列表生成式

来源:互联网 发布:2015家电市场销售数据 编辑:程序博客网 时间:2024/05/16 11:10
#coding=UTF-8import os #要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):L=list (range(1,11))print L#要生成[1x1, 2x2, 3x3, ..., 10x10]L2=[x*x for x in range(1, 11)]print L2#还可以使用两层循环,可以生成全排列:L3=[m + n for m in 'ABC' for n in 'XYZ']print L3# os.listdir可以列出文件和目录L4=[d for d in os.listdir('.')] print L4#把一个list中所有的字符串变成小写:L5 = ['Hello', 'World', 'IBM', 'Apple']L6=[s.lower() for s in L5]print L6


通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

L7=[x*x for x in range(1,10)]print L7L8_generator=(x*x for x in range(1,10))print L8_generator.next()

函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

举个简单的例子,定义一个generator,依次返回数字1,3,5:

def odd():    print('step 1')    yield 1    print('step 2')    yield(3)    print('step 3')    yield(5)


调用该generator时,首先要生成一个generator对象,然后用next()函数不断获得下一个返回值:

>>> o = odd()>>> next(o)step 11>>> next(o)step 23>>> next(o)step 35>>> next(o)Traceback (most recent call last):  File "<stdin>", line 1, in <module>StopIteration


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 哪里做发际线 v型发际线 发际线乱 发际线的价格 发际线高了 发际线调整多钱 女生发际线 发际线怎么算高 种发际线图片 整个发际线多少钱 发际线如何调整 做发际线要多少钱 发际线位置 如何调发际线 怎么弄发际线 去发际线 种发际线好吗 怎么做发际线 发际线长 发际线的图片 发际线高是为什么 如何发际线调整 发际线男 发际线到哪里算高 正常的发际线 有发际线好吗 发际线怎样 两侧发际线调整 发际线后移调整 怎么改善发际线 发际线太低了 发际线能脱吗 发际线太高了 发际线不齐怎么办 哪里是发际线 发际线高如何 正常人发际线 如何让发际线变高 男人发际线调整 发际线类型 m型发际线调整