迭代器 迭代器的引入 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,那么有几种方式? 1.通过索引取值 ,如了l[0],l[1] 2.通过for循环取值 for i in l: print(i)#xxx 但你有没有想过,我们为什么可以使用for循环来取值? for循环内部是怎么工作的呢? 迭代器 对于一个列表li=[1,2,3,4],我们可以通过这种方式来取值 li=[,,,] for i in li: print(i) 但是如果把li换成li=1234…
编者注:本文主要参考了<Python核心编程(第二版)> 说到生成器,先说说列表解析.列表解析可以动态创建列表. [expr for iter_var in iterable if cond_expr] 该句的核心是 for循环,它迭代了iterable对象的所有条目.如果满足cond_expr(条件表达式),则前面的expr(表达式)应用于该成员.最后生成的是满足条件的元素的该表达式的列表.对于lambda,map(),filter()等可以通过列表解析简化为一个列表解析式. 首先看看这三个…
生成器(generator)概念 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束. 生成器语法 生成器表达式: 通列表解析语法,只不过把列表解析的[]换成()生成器表达式能做的事情列表解析基本都能处理,只不过在需要处理的序列比较大时,列表解析比较费内存. >>> gen = (x**2 for x in range(5)) >>> gen <generator object <g…
首先,思考一个问题,比如,我们想生成0-100的列表,我们怎么做? 当然,可以写成 list1=[1,2,3...,100] 可以看出,这种方法不适合生成长的列表,那么Python中就可以利用已有的列表,生成新的列表,叫做列表生成式,下面就很简洁了 list2=[x for x in range(1,101)] list1和list2是一样的,只是list2更简单 比列表生成式更进一步的是,是列表生成器generator g=(x*2 for x in range(1,101)) g是一个生成器…
1.简介 通过列表生成式,我们可以直接创建一个列表,但是受到内存的限制,列表容量肯定是有限的. 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢? 在Python中,这种一边循环一边计算的机制,称为生成器:generator. 2.示例 2.1列表生成式的[]改成(),就创建了一个generator: s = (x * x for x in range(5)) print(s) # <generator object <genexpr> at 0x…
我们先考虑一个场景: 有个情景需要循环输出1——10. 这里给两种方法: list1 = [1,2,3,4,5,6,7,8,9,10] for i in list1: print(i) for i in range(1,11): print(i) 两种方式输出结果一样,但是我们考虑一下,如果要求输出1——1000000呢? 第一种方式会导致list1里面真实放入1000000长度的数字,占用空间很大,明显不是明智之举, 再来看第二种方法,用到range帮助我们生成数据,在python3中rang…