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

 更新时间:2025年06月12日 11:21:53   作者:V1ncent-CC  
推导表达式是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 推导表达式的资料请关注脚本之家其它相关文章!

相关文章

  • flask中主动抛出异常及统一异常处理代码示例

    flask中主动抛出异常及统一异常处理代码示例

    这篇文章主要介绍了flask中主动抛出异常及统一异常处理代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 这样写python注释让代码更加的优雅

    这样写python注释让代码更加的优雅

    任何编程语言都少不了注释,Python当然也不例外,下面这篇文章主要给大家介绍了关于如何写python注释,才能让你的代码更加的优雅,需要的朋友可以参考下
    2021-06-06
  • Python栈类实例分析

    Python栈类实例分析

    这篇文章主要介绍了Python栈类,实例分析了Python实现栈的入栈、出栈、移除、判定为空的相关技巧,需要的朋友可以参考下
    2015-06-06
  • Python脚本实现调用手机摄像头

    Python脚本实现调用手机摄像头

    这篇文章主要为大家详细介绍了Python如何通过,脚本实现调用手机摄像头,这样就能随时随地用电脑偷偷看看男朋友都在干啥了,感兴趣的小伙伴可以了解下
    2025-03-03
  • Python写安全小工具之TCP全连接端口扫描器

    Python写安全小工具之TCP全连接端口扫描器

    这篇文章主要介绍了Python写安全小工具之TCP全连接端口扫描器,文章通过TCP connect来实现一个TCP全连接端口扫描器。具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 一文教你将Visual Studio Code变成Python开发神器

    一文教你将Visual Studio Code变成Python开发神器

    Visual Studio Code 是一款功能强大、可扩展且轻量级的代码编辑器,经过多年的发展,已经成为 Python 社区的首选代码编辑器之一。本文将为大家介绍一下如何将Visual Studio Code变成Python开发神器,需要的可以参考一下
    2022-07-07
  • python处理DICOM并计算三维模型体积

    python处理DICOM并计算三维模型体积

    这篇文章主要为大家详细介绍了python处理DICOM,并计算三维模型体积,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • Django使用HTTP协议向服务器传参方式小结

    Django使用HTTP协议向服务器传参方式小结

    本文主要介绍了Django使用HTTP协议向服务器传参方式小结,用户发送请求时携带的参数后端需要使用,而不同的发送参数的方式对应了不同的提取参数的方式,本文就详细的介绍一下
    2021-08-08
  • maven冲突问题解决

    maven冲突问题解决

    这篇文章主要介绍了maven冲突问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python批量提取PDF文件中文本的脚本

    Python批量提取PDF文件中文本的脚本

    这篇文章主要为大家详细介绍了Python批量提取PDF文件中文本的脚本,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03

最新评论