三元表达式,列表解析和生成器表达式

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: 三元表达式在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子if x > y: print("the max is x")else: print("the max is y")三元表达式的语法为:True if expression else False现在可以...
+关注继续查看

三元表达式

在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子

if x > y:
    print("the max is x")
else:
    print("the max is y")

三元表达式的语法为:

True if expression else False

现在可以个体三元表达式来完成这种比较简单的判断

res = x if x > y else y
print(res)

列表解析

列表解析的语法格式为

[ i操作 for i in 列表 if 表达式1 and 表达式2]
  • 其中if判断语句是可选语句,可以对列表的元素进行操作

现在有这样一个需求,把一个数字列表中的每个值都取平方,把一个列表中的每个字符串都转换为大写形式

可以这样写

l1 = range(1, 10, 2)
l2 = []
for i in l1:
    l2.append(i**2)

l3 = ['python', 'linux', 'javascript', 'mysql']
l4 = []
for j in l3:
    j = j.upper()
    l4.append(j)

print(l2)
print(l4)

那有没有简单的方式呢,可以使用列表解析,上面的例子则可以修改为

l1 = range(1, 10, 2)
l2 = [i**2 for i in l1]

l3 = ['python', 'linux', 'javascript', 'mysql']
l4 = [j.upper() for j in l3]

print(l2)
print(l4)

生成器表达式

列表解析得到的结果仍然是一个列表,列表解析的优点是:取值方便
缺点:很占系统资源,如果列表的长度较小时使用列表解析会很方便,但是如果列表的长度很大的时候,使用列表解析会占用很多的内存资源,此时可以使用生成器表达式来节省内存资源
来看下面的例子

res = ( i**2 for i in range(100))
print(res)

得到的结果为

<generator object <genexpr> at 0x0000000002DA1AF0>

在上面的例子里,把列表解析表达式中的中括号换成小括号,那么表达式执行结果就变成了一个生成器

我们知道,生成器的本质就是迭代器,所以上面的表达式执行的结果生成器,可以使用for 循环来取值

res = ( i**2 for i in range(100))

for i in res:
    print(i)
目录
相关文章
|
14天前
三元表达式
三元表达式
9 0
|
24天前
什么是三元表达式?
什么是三元表达式?
|
4月前
三元表达式/推导式
三元表达式/推导式
17 0
|
4月前
|
算法
|
5月前
三元表达式竟然可以这样玩(多条件判断无限嵌套)
三元表达式竟然可以这样玩(多条件判断无限嵌套)
33 0
|
8月前
|
C语言
【学习笔记之我要C】求值表达式
【学习笔记之我要C】求值表达式
27 0
|
编译器
【C++Primer】第4章:表达式
【C++Primer】第4章:表达式
【C++Primer】第4章:表达式
|
Serverless vr&ar 容器
F#表达式求值
重点介绍如何用F#求表达式 ( a + x ) * b 的值
860 0
F#表达式求值
相关产品
云迁移中心
推荐文章
更多