三元表达式、列表生成式和生成器生成式

三元表达式

可以将if....else...双分支流程变成一行

语法:

条件成立返回的值 if 判断条件 else 条件不成立返回的值

# 求两个值的大小
def max_min(a, b):
    if a > b:
        return a
    else:
        return b

max_min(10,23)
print(max_min(10,23))

# 可以写成三元表达式形式
def max_min(a, b):
    res = a if a > b else b
    return res

print(max_min(10,23))
# 需求: 让用户输入用户名,输入的用户如果是ank,为其后缀添加_DSB

name = input("请输入用户名:").strip()
if name != 'ank':
    print(name)
else:
    print(name+'_DSB')

# 可以写成三元表达式形式
name = input("请输入用户名:").strip()
user_name = name if name != 'ank' else name + '_DSB'
print(user_name)

列表生成式

可以实现一行实现生成列表

语法:

list = [取出的每一个值、任意值 for 从可迭代对象中取出的每一个值 in 可迭代对象]

for的右边是循环次数,可以取出可迭代对象中的每一个值

for的左边可以为当前列表添加值

# 将l1中的值,依次取出,添加到l2中
l1 = [1, 238, 32, 4, 5]
l2 = [i for i in l1]
print(l2)

# 将l3列表中的每一个人后缀都添加_dsb
l3 = ['tank','jason', 'sean', 'egon']
l4 = [i+'_dsb 'for i in l3]
print(l4)

list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]

# 将name_list列表中的tank过滤掉,其他人后缀都添加_dsb
name_list = ['tank', 'jason', 'sean', 'egon', 'tank']
new_name = [i+'_dsb' for i in name_list if i != 'tank']
print(new_name)

生成器表达式(生成式)

生成器生成式vs列表生成式

列表生成式:数据量小时使用,一次全部取出

​ 优点:可以依赖索引取值,取值方便

​ 缺点:浪费资源

生成器生成式:将列表生式的[ ]换成()

数据量大时使用

​ 优点:节省资源

​ 缺点:取值不方便

# 生成一个1000个值的生成器
# 用生成器生成式
g = (i for i in range(1,1001))
print(g)
>>>
# 得到生成器的内存地址
<generator object <genexpr> at 0x000001DC7CDDF748>
# 用列表生成式实现
list = [i for i in range(1,1001)]
print(list)
>>>
[1, 2, 3, ....., 998, 999, 1000]
posted @   Mr沈  阅读(217)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示

目录