python 生成器表达式_Python中期学者必看之生成器表达式和enumerate

前言:当输入的数据量大于某些数值之后,列表的内存占用大小变得不可忽视,解决方法就是利用生成器表达式描述列表,避免内存占用过高,类似于最简单的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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值