当前位置:   article > 正文

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/101857
推荐阅读
相关标签
  

闽ICP备14008679号