Python推导表达式的几种方法实现

作者:

文章目录
  • 列表表达式是一种通过遍历序列构造列表对象的方法。 语法是在中括号中一个表达式紧跟着1或多个for语句,以及0或多个if子句。Python会将表达式在for语句中依次循环,并应用if语句过滤(如果有的话),最后将结果按顺序填充到列表中。 例如将range(10)中偶数的平方添加到列表中,常规for循环代码如下: l = [] for v in range(10): if v%2 == 0: l.append(v**2) 下面是等价的列表表达式,依次将表达式、for语句、if语句写在方括号中即可,相对于上面的代码更加简洁: l = [v**2 for v in range(10) if v%2==0] 如遇到嵌套循环,只需要在表达式中按顺序编写for语句和if语句即可。在下面由元组组成的列表中,找出长度为4的元组,并将其中的偶数元素的平方添加到列表中,常规代码如下: lt = [(0,1,2), (3,4,5,6), (7,8,9)] l = [] for t in lt: if len(t) == 4: for v in t: if v%2 == 0: l.append(v**2) 换成列表表达式,只需按多层嵌套的顺序依次填写for和if子句即可: l = [v**2 for t in lt for v in t if len(t)==4 if v%2==0] 结果相同,但代码量少了许多,如果有更多的嵌套,只需要按顺序添加即可。
  • 生成器表达式的语法和列表表达式几乎相同,只是括号由中括号换成小括号,这一变化的结果是返回对象不再是一个列表,而是一个生成器,你可以根据需要手动迭代取出结果。由于它不会像列表表达式那样一次性生成所有的结果,因此在处理大对象时生成器表达式相比列表表达式则更节约内存。 将列表表达式中的中括号替换为小括号,即是生成器表达式: g = (v**2 for v in range(10) if v%2==0) 可以用next函数或for循环取出结果: next(g) next(g) for v in g: print(v) 这里用next方法手动取出2个元素,然后用for循环取出剩下元素。 注意生成器对象完成一次迭代后就消耗掉了,再次尝试获取值时会得到StopIteration异常: next(g)
  • 集合表达式和列表表达式的区别也是括号不同,集合表达式用花括号包围,最后得到的结果是一个集合,注意空的{}创建的不是集合而是字典。 只需要将列表表达式的[]替换为{}即变成集合表达式,对比下面列表表达式和集合表达式,注意集合会自动去重: [v%3 for v in range(10)] {v%3 for v in range(10)}
  • 字典表达式也是由花括号包围,表达式部分需要由冒号分隔的2个表达式组成,2个表达式计算后的结果分别作为键:值填充到字典中。 下面代码将值作为键,平方作为值,创建一个字典: {v:v**2 for v in range(5)} 键和值部分也可以分开循环: {k:v for k,v in zip((1,2,3), (‘a’,’b’,’c’))} 以上即是Python中常用的表达式用法,灵活运用可以方便的建立各种对象。更多关于Python 推导表达式的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python小知识之几种推导式用法示例 Python列表推导式详解 Python进阶之列表推导与生成器表达式详解 python基础操作列表推导式 Python列表推导式的基本操作详解 Python使用列表推导式快速生成列表 Python的列表推导式实例详细解析 Python基础知识之推导式详解 Python特性之列表推导式和生成器表达式详解 python实现列表推导式与生成器 Python中列表乘法和列表推导式的区别举例详解
  • 目录
    • 一、列表表达式
    • 二、生成器表达式
    • 三、集合表达式
    • 四、字典表达式

    推导表达式(也称为解析语法)是Python中一种遍历序列并创建指定类型对象的方法,相对于使用for循环遍历,推导表达式在语法上更加简洁。常用的推导表达式有:列表表达式、生成器表达式、字典表达式、集合表达式等。

    列表表达式是一种通过遍历序列构造列表对象的方法。

    语法是在中括号中一个表达式紧跟着1或多个for语句,以及0或多个if子句。Python会将表达式在for语句中依次循环,并应用if语句过滤(如果有的话),最后将结果按顺序填充到列表中。

    在这里插入图片描述

    例如将range(10)中偶数的平方添加到列表中,常规for循环代码如下:

    l = []
    for v in range(10):
        if v%2 == 0:
            l.append(v**2)
    

    在这里插入图片描述

    下面是等价的列表表达式,依次将表达式、for语句、if语句写在方括号中即可,相对于上面的代码更加简洁:

    l = [v**2 for v in range(10) if v%2==0]
    

    在这里插入图片描述

    如遇到嵌套循环,只需要在表达式中按顺序编写for语句和if语句即可。在下面由元组组成的列表中,找出长度为4的元组,并将其中的偶数元素的平方添加到列表中,常规代码如下:

    lt = [(0,1,2), (3,4,5,6), (7,8,9)]
    l = []
    for t in lt:
        if len(t) == 4:
            for v in t:
                if v%2 == 0:
                    l.append(v**2)
    

    在这里插入图片描述

    换成列表表达式,只需按多层嵌套的顺序依次填写for和if子句即可:

    l = [v**2 for t in lt for v in t if len(t)==4 if v%2==0]
    

    在这里插入图片描述

    结果相同,但代码量少了许多,如果有更多的嵌套,只需要按顺序添加即可。

    生成器表达式的语法和列表表达式几乎相同,只是括号由中括号换成小括号,这一变化的结果是返回对象不再是一个列表,而是一个生成器,你可以根据需要手动迭代取出结果。由于它不会像列表表达式那样一次性生成所有的结果,因此在处理大对象时生成器表达式相比列表表达式则更节约内存。

    在这里插入图片描述

    将列表表达式中的中括号替换为小括号,即是生成器表达式:

    g = (v**2 for v in range(10) if v%2==0)
    

    在这里插入图片描述

    可以用next函数或for循环取出结果:

    next(g)
    next(g)
    for v in g:
        print(v)
    

    在这里插入图片描述

    这里用next方法手动取出2个元素,然后用for循环取出剩下元素。

    注意生成器对象完成一次迭代后就消耗掉了,再次尝试获取值时会得到StopIteration异常:

    next(g)
    

    在这里插入图片描述

    集合表达式和列表表达式的区别也是括号不同,集合表达式用花括号包围,最后得到的结果是一个集合,注意空的{}创建的不是集合而是字典。

    在这里插入图片描述

    只需要将列表表达式的[]替换为{}即变成集合表达式,对比下面列表表达式和集合表达式,注意集合会自动去重:

    [v%3 for v in range(10)]
    {v%3 for v in range(10)}
    

    在这里插入图片描述

    字典表达式也是由花括号包围,表达式部分需要由冒号分隔的2个表达式组成,2个表达式计算后的结果分别作为键:值填充到字典中。

    在这里插入图片描述

    下面代码将值作为键,平方作为值,创建一个字典:

    {v:v**2 for v in range(5)}
    

    在这里插入图片描述

    键和值部分也可以分开循环:

    {k:v for k,v in zip((1,2,3), ('a','b','c'))}
    

    在这里插入图片描述

    以上即是Python中常用的表达式用法,灵活运用可以方便的建立各种对象。更多关于Python 推导表达式的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • Python小知识之几种推导式用法示例
    • Python列表推导式详解
    • Python进阶之列表推导与生成器表达式详解
    • python基础操作列表推导式
    • Python列表推导式的基本操作详解
    • Python使用列表推导式快速生成列表
    • Python的列表推导式实例详细解析
    • Python基础知识之推导式详解
    • Python特性之列表推导式和生成器表达式详解
    • python实现列表推导式与生成器
    • Python中列表乘法和列表推导式的区别举例详解

    站内搜索