zoukankan      html  css  js  c++  java
  • python 字典、列表、元组生成器的使用

    python的生成式在一些类型相互转换的时候可以写出十分优雅的代码。如列表转换成另一个列表、字典、或元组。并且代码的执行效率也比使用for...in...循环高。

    列表生成式

    列表生成式即生成列表的生成式,写法简单而优雅,可以将多行代码融合成一行。主要的作用是将其他对象转换成列表或对原来的列表进行过滤。

    # 列表转换列表
    ls = [1,2,4,6]
    ls1 = [x**2 for x in ls]
    print(ls1)
    结果:[1,4,16,36]
    
    # 对列表过滤,返回true的才会保留到列表
    ls = [1,2,4,6]
    ls1 = [x**2 for x in ls if x > 3]
    print(ls1)
    结果:[16, 36]
    
    # 多条件过滤
    ls = [1,2,4,6]
    ls1 = [x**2 if x > 2 else x**3 for x in ls]
    print(ls1)
    结果:[1, 8, 16, 36]
    
    # 多重循环
    ls = [1,2,4,6]
    ls1 = [x**y if x > 2 else x**3 for x in ls for y in ls]
    print(ls1)
    结果:[1, 1, 1, 1, 8, 8, 8, 8, 4, 16, 256, 4096, 6, 36, 1296, 46656]

    生成器生成式

    • 在涉及到需要遍历列表而不是针对列表的某个值操作时,使用生成器代替列表可以减少内存的消耗。
    ls = [1,2,4,6]
    ls1 = (x**2 for x in ls)
    print(ls1)
    结果:<generator object <genexpr> at 0x0000021B21DED150>
    
    # 通过for..in取数据不需要处理StopIteration
    for i in ls1:
        pass
    
    # next()方法需要处理StopIteration
    while True:
        try:
            print(next(ls1))
        except StopIteration:
            pass

    字典生成式

    字典生成式在一些需要列表或元组转化成字典的场合可以写出很优雅的代码。

    # dict()可以接受类似列表生成式的写法,前提是ls至少是二维可迭代对象,否则报错
    ls = [('name1','xiao'),('name2','wang')]
    dict_ls = dict(x for x in ls)
    print(dict_ls)
    结果:{'name1': 'xiao', 'name2': 'wang'}

    元组生成式

    由于()这个类似列表生成式的形式被生成器占用了,所有元组生成式使用tuple()来进行。

    ls = [('name1',['1','2']),('name2','wang')]
    dict_ls = tuple(x for x in ls)
    print(dict_ls)
    结果:(('name1', ['1', '2']), ('name2', 'wang'))
     
  • 相关阅读:
    服务器端渲染和客户端渲染
    混沌开窍---24幅由算法生成的正方形图像
    三生万物---算法生成的25幅三角形图像
    九尾之火---算法生成的动画图像
    最简单的分形图像生成算法
    正与邪---25幅由算法生成的五角星图像
    一幅画<十六芒星盾>---程序员or艺术家
    火火火---12幅算法生成火的图像
    恶魔的指纹---49幅由算法生成的七芒星图像
    混沌分形之电子云
  • 原文地址:https://www.cnblogs.com/alexstraze/p/9275924.html
Copyright © 2011-2022 走看看