列表解析式

举例:
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循环遍历

列表解析式,生成表达式相关推荐

  1. Python - 列表解析式/生成器表达式

    列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...

  2. python列表解析式_Python基础入门-列表解析式

    今天我们使用Python中的列表解析式来实现一些简单功能.好了关于列表解析式是什么?我的理解是它可以根据已有列表,高效创建新列表的方式.列表解析是Python迭代机制的一种应用,它常用于实现创建新的列 ...

  3. Python进阶3——列表解析式和生成器表达式

    列表解析式相比循环更加简介易读 abc='abcdef' codes1=[] for code in abc:codes1.append(ord(code))#返回字符对应的十进制数.codes2=[ ...

  4. 列表推导式与生成表达式的区别

    阅读目录 列表推导式与生成式表达式的区别: #列表推导式 -------------------------------------------------------------------- 注: ...

  5. python列表解析,生成表达式(一分钟读懂)

    如果想通过操作和处理一个序列来创建一个新的列表时,可以使用列表解析和生成表达式 区分就是 [ ] ( ) 1.列表解析 list comprehensions 2.生成表达式 a = [ i for ...

  6. python列表解析式如何使用_python列表推导式操作解析

    python列表推导式操作解析 这篇文章主要介绍了python列表推导式操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本格式 ​[表达式 ...

  7. Python列表解析式,还支持异步?你知道吗?

    摘要 PEP-492 和 PEP-525 通过 async/await 语法,引入了对原生协程和异步生成器的支持.本 pep 提议给列表.集合.字典解析式和生成器表达式添加异步的版本. 基本原理和目标 ...

  8. python列表解析式如何使用_python列表解析式,生成器,及部分内建函数使用方法...

    标准库datetime 需要导入datetime模块: import datetime datetime模块: 对日期,时间,时间戳的处理 datetime的类方法 today  () now(tz= ...

  9. python 列表解析式_python列表解析式,字典解析式,集合解析式和生成器

    一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...

  10. 列表解析python_python列表解析式

    列表解析--用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 生成1-100以内的偶数 a3 = [x for x in range(1,1 ...

最新文章

  1. C#日期格式精确到毫秒 !!
  2. C#--检索线程状态
  3. 2021 - 10 -7 ! 二叉树的前序、中序、后序遍历 非递归思路(迭代版本)
  4. vb与matlab数据交互时间延时多长,VB中实现延时(等待)的几种方法
  5. 一 Struts2 开发流程
  6. 信息系统项目管理师论文_「高项论文」谨防信息系统项目管理师论文12个写作丢分点...
  7. VS Code设置中文插件
  8. RestClient使用
  9. python编程(类的释放)
  10. 计算机应用基础选择题综合十,计算机应用基础选择题综合复习练习题
  11. dataframe scala 修改值_Spark DataFrame:提取某列并修改/ Column更新、替换
  12. 完成端口————留着看
  13. iOS开发之Runloop(转)
  14. 算法4(一、递归学习)
  15. sql注入的闭合方式
  16. STM32 F103之点亮LED流水灯 (STM32入门学习)
  17. 【解决方案】Ubuntu18.04 安装L2TP及相关设置
  18. 使用cookie进行模拟登陆
  19. 双云台AI智能分析跟踪会议云台摄像机技术应用
  20. 没有痛苦的博士求学经历不是合格的(彭思龙)

热门文章

  1. /etc/hosts文件中的::1是什么意思
  2. PTA 机工士姆斯塔迪奥 python
  3. Redis原理浅析(一):Redis基本数据类型、事务以及排序
  4. Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)
  5. [项目管理] 项目管理之配置管理
  6. 自然语言处理NLPIR-ICTCLAS 授权文件过期问题
  7. 旅游网站毕业设计,旅游网站网页设计设计源码,旅游网站设计毕业论文
  8. 【Day4.5】走人行天桥去百丽宫海生馆
  9. 三种T检验的详细区分
  10. 写了这么久的业务连异常都不知道怎么处理吗