列表解析式,生成表达式
列表解析式
举例:
1.生成一个列表,元素0~9,对每一个元素自增1后求平方返回新列表
x = []
for i in range(10):
x.append(i+1)
print(x)
解析式写法:[i+1 for i in range(10)]
语法:
[返回值 for元素 in 可迭代对象 if 条件]
使用中括号[],内部是for循环,if条件语句可选
返回一盒新的列表
列表解析式是一种语法糖
编译器会优化,不会因为简写而影响效率,反而因优化提高了效率
减少程序员,减少出错
简化了代码,当可读性增强
举例:
获取10以内的偶数
even = []
for x in range(10):
if x % 2 == 0 :
even.append(X)
even = [x for x in range if x%2==0]
列表解析进阶
[expr for item in iterable if cond1 if cond2]
等于
ret = []
for item in iterable:
if cound1:
if cound2:
ret.append(expr)
20以内,即能被2整除又能被3整除的数
[i for i in range if i%20 and i%30]
[i for i in range if i%20 if i%30]
列表解析进阶:
[expr for i in iterable1 for j in iterable2]
等价于
ret = []
for i in iterable1:
for j in iterable2:
ret.append(expr)
[(x,y) for x in ‘abcde’ for y in range (3)]
[[x ,y] for x in ‘abcde’ for y in range (3)]
[{x:y} for x in ‘abcde’ for y in range (3)]
集合解析式
语法
{返回值 for 值 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{}就行了
立即返回一个集合
{x for x in range(10)}
字典解析式
{返回值 for 值 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{}就行了
使用key:value形式
立即返回一个字典
{x:x for x in range(10)}
{x:[x,x+1] for x in range(10)}
{(x,):x for x in range(10)}
生成器表达式Generator expression
语法:
(返回值 for 元素 in 可迭代对象 if 条件)
列表解析式的中括号换成小括号就行了
返回一个生成器
和列表解析式的区别
生成器表达式是按需计算(或称惰性计算 延迟计算),需要的时候才计算值
列表解析式是立即返回值
生成器:
可迭代对象
迭代器
生成器表达式**
g = (i for i in range(1,11))
next(g)
for x in g:
print(x)
for x in g:
print(x)
延迟计算
返回迭代器
迭代器从前到后走,走完一遍后,就失效,不能回头
跟列表解析式对比:
g = [i for i in range(1,11)]
for x in g:
print(x)
for x in g:
print(x)
立即计算
返回的不是迭代器,返回的说可迭代对象列表
可以重复迭代
生成器表达式和列表解析式的对比
计算方式
生成器表达式是延迟计算(惰性计算),列表解析式是立即计算
内存占用
单从返回值本身来说,生成器表达式省内存,列表解析式返回新的列表
生成器没有数据,内存占用极少,它是使用时一个个返回数据.如果将这些返回的数据合起来和列表解析式差不多.它不需要立即占用这么多内存
列表解析式构造新的列表需要立即占用内存,不管你是否立即使用全部数据
计算速度
单看计算时间看,生成器表达式耗时非常短,列表解析式耗时长
生成器本身本身并没有返回任何值,只返回了一个生成器对象
列表解析式构造并返回了一个新的列表,所以看起来耗时了
总结
python2 引入列表解析式
python2.4 引入生成器表达式
python3 引入集合 字典解析式,并迁移到2.7
应该多用解析式,简短 高效
如果一个解析式非常复杂,难以读懂,可以考虑拆解成for循环
生成器和迭代器是不同的对象,但都式可迭代对象
可迭代对象范围很大,都可以使用for循环遍历
列表解析式,生成表达式相关推荐
- Python - 列表解析式/生成器表达式
列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...
- python列表解析式_Python基础入门-列表解析式
今天我们使用Python中的列表解析式来实现一些简单功能.好了关于列表解析式是什么?我的理解是它可以根据已有列表,高效创建新列表的方式.列表解析是Python迭代机制的一种应用,它常用于实现创建新的列 ...
- Python进阶3——列表解析式和生成器表达式
列表解析式相比循环更加简介易读 abc='abcdef' codes1=[] for code in abc:codes1.append(ord(code))#返回字符对应的十进制数.codes2=[ ...
- 列表推导式与生成表达式的区别
阅读目录 列表推导式与生成式表达式的区别: #列表推导式 -------------------------------------------------------------------- 注: ...
- python列表解析,生成表达式(一分钟读懂)
如果想通过操作和处理一个序列来创建一个新的列表时,可以使用列表解析和生成表达式 区分就是 [ ] ( ) 1.列表解析 list comprehensions 2.生成表达式 a = [ i for ...
- python列表解析式如何使用_python列表推导式操作解析
python列表推导式操作解析 这篇文章主要介绍了python列表推导式操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本格式 [表达式 ...
- Python列表解析式,还支持异步?你知道吗?
摘要 PEP-492 和 PEP-525 通过 async/await 语法,引入了对原生协程和异步生成器的支持.本 pep 提议给列表.集合.字典解析式和生成器表达式添加异步的版本. 基本原理和目标 ...
- python列表解析式如何使用_python列表解析式,生成器,及部分内建函数使用方法...
标准库datetime 需要导入datetime模块: import datetime datetime模块: 对日期,时间,时间戳的处理 datetime的类方法 today () now(tz= ...
- python 列表解析式_python列表解析式,字典解析式,集合解析式和生成器
一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...
- 列表解析python_python列表解析式
列表解析--用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 生成1-100以内的偶数 a3 = [x for x in range(1,1 ...
最新文章
- C#日期格式精确到毫秒 !!
- C#--检索线程状态
- 2021 - 10 -7 ! 二叉树的前序、中序、后序遍历 非递归思路(迭代版本)
- vb与matlab数据交互时间延时多长,VB中实现延时(等待)的几种方法
- 一 Struts2 开发流程
- 信息系统项目管理师论文_「高项论文」谨防信息系统项目管理师论文12个写作丢分点...
- VS Code设置中文插件
- RestClient使用
- python编程(类的释放)
- 计算机应用基础选择题综合十,计算机应用基础选择题综合复习练习题
- dataframe scala 修改值_Spark DataFrame:提取某列并修改/ Column更新、替换
- 完成端口————留着看
- iOS开发之Runloop(转)
- 算法4(一、递归学习)
- sql注入的闭合方式
- STM32 F103之点亮LED流水灯 (STM32入门学习)
- 【解决方案】Ubuntu18.04 安装L2TP及相关设置
- 使用cookie进行模拟登陆
- 双云台AI智能分析跟踪会议云台摄像机技术应用
- 没有痛苦的博士求学经历不是合格的(彭思龙)
热门文章
- /etc/hosts文件中的::1是什么意思
- PTA 机工士姆斯塔迪奥 python
- Redis原理浅析(一):Redis基本数据类型、事务以及排序
- Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)
- [项目管理] 项目管理之配置管理
- 自然语言处理NLPIR-ICTCLAS 授权文件过期问题
- 旅游网站毕业设计,旅游网站网页设计设计源码,旅游网站设计毕业论文
- 【Day4.5】走人行天桥去百丽宫海生馆
- 三种T检验的详细区分
- 写了这么久的业务连异常都不知道怎么处理吗