美文网首页
Python学习: 列表推导式和生成器表达式

Python学习: 列表推导式和生成器表达式

作者: 达闻西_ | 来源:发表于2020-03-30 23:35 被阅读0次

    列表推导式是构建列表(list)的快捷方式,生成器表达式则可以用来创建其他任何类型的序列,如果你的代码里不经常使用他们,那么很可能你错过了许多可写出可读性更好且更高效的代码的机会 <流畅的python>

    情景

    此时我们想要创建一个数组,里面是1到10000以内的所有偶数。

    首先第一个想到的是用for in 循环

    l = []
    for i in range(1, 10000):
        if i%2 == 0:
            l.append(i)
    

    显然这个一个解,如果你初学python,这么解一定没有问题,可是做开发的时候,就需要考虑效率问题

    列表推导式

    [i for i in range(1, 10000) if i%2 == 0]
    

    简单翻译一下:我们需要得到i,这个i的范围是1到10000,如果i除以2等于0的话

    列表推导式的作用只有一个:生成列表!!!

    语法非常简单,在中括号内写上循环条件结果就行。显然用列表推导式得到的代码更加易读,方便他人查看阅读学习。

    使用原则:只用列表推导式来创建新的列表,如果超过两行,就要考虑是否要用for循环重写

    生成器表达式

    l = (i for i in range(1, 10000) if i%2==0)
    #<generator object genexpr at 0x0000>
    

    生成器表达式 只需要将列表推导式的中括号换成小括号即可。

    生成器是一种特殊的迭代器

    迭代器:惰性计算数据,节省内存,能够记录状态,并且通过next()函数访问下一个状态

    生成器拥有迭代器的性质

    生成器产生的数据不会一次被加载到内存中,可以节约内存空间,如果上文是1到100000000的偶数,那么生成的列表将会非常占用空间,并且很大可能我们只会用到当中的某几个数字,如果将所有数字加载到内存中,显然是不合适的。

    print(next(l)) # 2
    print(next(l)) # 4
    

    每调用一次next()方法,就会拿到当前位置的下一位置的数据,并且记录目前的位置状态,等到下次调用next()方法的时候,就会顺着获得下一个数据。

    for i in l:
        print(l)
    

    显然也可以用for循环迭代生成器表达式的结果


    有疑问欢迎交流学习

    相关文章

      网友评论

          本文标题:Python学习: 列表推导式和生成器表达式

          本文链接:https://www.haomeiwen.com/subject/dptiuhtx.html