当前位置: 代码网 > it编程>前端脚本>Python > Python 推导表达式的几种方法实现

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

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

推导表达式(也称为解析语法)是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 推导表达式的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com