三元表达式,列表解析和生成器表达式-阿里云开发者社区

开发者社区> 任平生78> 正文

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

简介: 三元表达式 在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子 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)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
7.5-7.6 列表生成式和生成器以及区别
一、列表生成式是 python 受欢迎的语法之一 通过一句简洁的语法就可以对一组元素进行过滤 还可以对得到的元素进行转换处理。 li = [x + x for x in range(1, 101) if x % 2 == 0] print(li) def funa(x): ...
542 0
SAS进阶《深入解析SAS》之开发多语言支持的SAS程序
SAS进阶《深入解析SAS》之开发多语言支持的SAS程序 1. 多语言支持的应用程序是指该程序在世界给第使用时,其能够处理的数据,以及处理数据的方式、信息展现的方式都符合当地的语言、文化习惯,这要求应用程序运行时,能够自动进行与地区、语言相关的处理,也就是通常所说的国际化。 2. SBCS、DBCS、MBCS 单字节字符集SBCS指在该字符集中的字符最多由2个字
1680 0
文件上传并生成几种大小的缩略图之二
Image uploader Ajax图片上传生成缩略图,原版是国外一个有名的图片上传程序,采用无刷新的Ajax上传方式,上传成功后,可生成四张不同大小的缩略图,参数可以自己调整,演示效果可看如本站首页。
699 0
SSM框架——使用 MyBatis Generator 生成代码,包括:Model、Dao、Mapping
基于 SSM 框架开发,Mybatis 属于半自动 ORM,如果每个数据表相关的 Model、Dao、Mapping 都要自己动手去写,是不是很麻烦呢?工作量最大的就是书写Mapping的映射文件,而且手动书写很容易出错。
1156 0
+关注
152
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载