赞
踩
前言:当输入的数据量大于某些数值之后,列表的内存占用大小变得不可忽视,解决方法就是利用生成器表达式描述列表,避免内存占用过高,类似于最简单的for表达式 .
当输入数据较少时候,必须要用到列表推导,但是如果内存消耗较大,容易导致程序崩溃.通过无休止的循环字符进行操作,久而久之,列表推导也会出现问题,python为此提供了生成器表达式,在每一次运行中生成一项数据.
a = (len(x) for x in open('my_file.txt'))
>>> print(a)
at 0xadsfjiha***>
上例中演示了如何读取一份文件并且返回每行字符数,采用生成器表达式,由于是每一次临时生成,所以不用担心内存迅速增加占用的问题 .
生成器表达式也同样能一起使用,甚至嵌套使用:
>>> list1 = ((x,x**0.5) for x in a)
上述的语法是没有错误的 .
使用enumerate代替range :
核心要点:
(1)enumerate函数提供了一种精简的写法,可以在遍历迭代器时获知每个元素的索引。
(2)尽量用enumerate来改写那种将range与下标访问相结合的序列遍历代码。
(3)可以给enumerate提供第二参数,以指定开始计数时所用的值(默认为0)
range在使用中大部分用于创建一系列整数的迭代:
>>> list2 = ['sada','safadg','aghfdhd','asfaqwe']
>>> for name in list2:
print("%s" % list2)
我们访问其中元素必须获得其长度以及下标,似乎不便于理解 .
python提供了内建函数:enumerate函数解决这个难题 .
enumerate可使用各个迭代器作为生成器,产出相关值 .
>>> for i,n in enumerate(list3,1):
...
print('%d:%s'% (i,n))
...
1:sada
2:safadg
3:aghfdhd
4:asfaqwe
编于2018.2.21
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。