列表解析式 && 生成器表达式

本文通过1个例子说明列表解析式与生成器表达式的用法与区别
如果想求出某个文件最长的行,用列表解析式的代码如下:

f = open('test.txt','r')
longest = 0
allLines = [ line.strip() for line in f.readlines()]
f.close() #此处关闭文件是因为当多个进程要读取某个文件时候,我们在读取所有行之后要尽快释放文件句柄
for line in allLines:lineLen = len(line)if lineLen > longest:longest = lineLen
return longest

然而当处理大文件的时候,readlines()会读取文件的所有行,对于超大文件这样是不可行的,于是就有列表解析式,不需要讲所有行读入内存,而是迭代的过程中计算每行的长度。代码如下:

f = open('test.txt','r')
longest = 0
allLines = [len(line.strip()) for line in f]
f.close() #此处关闭文件是因为当多个进程要读取某个文件时候,我们在读取所有行之后要尽快释放文件句柄
return max(allLines)

上述写法是最优的吗?仔细想想,如果文件是超级大,尽管不需要把文件全部读入内存,但是却要维护1个文件每行长度的列表,也就是说allLines这个列表依旧很长,有没有其它方法呢?生成器表达式派上用场了,代码如下:

f = open('test.txt','r')
longest = max(len(line.strip()) for line in f)
f.close()
return longest

注意生成器表达式与列表解析式写法上的不同就是缺少”[]”, 生成器表达式依次迭代读入文件的行,并且返回迭代器,然后把迭代器作为max()的函数,求出最大行的长度,这个过程中是不需要维护任何列表的,也就避免了用列表解析式很消耗内存的缺点。

以下例子是1个最简单的生成器表达式

max(i for i in range(10))
>> 9

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

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

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

  2. [转载] Python中的解析式和生成器表达式

    参考链接: Python | 生成器表达式 解析式和生成器表达式 列表解析List Comprehension 语法 [返回值 for 元素 in 可迭代对象 if 条件]使用中括号[],内部是for ...

  3. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  4. 列表解析和生成器表达式

    列表解析(List comprehensions,或者缩略为list comps)来自函数式编程语言Haskell,可以用来动态创建列表. [expr for iter_var in iterable ...

  5. python关键字列表的表达式,python 列表推导和生成器表达式的使用

    序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...

  6. Python 列表推导 、生成器表达式与声明式编程

    1.****列表推导********* 用到函数的一个常见的操作是将其用于列表的所有项,并使用结果创建一个新的列表.例如: # coding=utf-8 ''' ****列表推导********* 用 ...

  7. mysql数据字典生成器_「python技术」列表推导、生成器表达式和字典推导的差异及其示例

    #开往春天新创作大赛# 前言 列表推导式构建列表的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.自python2.7以后,列表推导和生成器表达式的概念就应用到了字典上,所以就有了字典推导, ...

  8. python天天向上代码解析-python列表解析和生成器表达式

    列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析.列表解析表达式为: [expr for iter_var in iterable] [expr for iter_var in iter ...

  9. 列表推导和生成器表达式

    1 概念解释 列表推导是构建列表的快捷方式,生成器表达式可以用来创建其他任何类型的序列. 列表推导:放在方括号里的表达式,使用关键字for与in,通过处理和过滤一个或多个可迭代对象里的元素构建列表. ...

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

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

最新文章

  1. Nat. Commun. | 深度学习探索可编程RNA开关
  2. android ajax 跨域更新本地html,本地webapp是怎么解决跨域问题的?
  3. nginx安装包_安装nginx与fastdfs-nginx-module
  4. 通信电子线路期末复习第三章正弦波振荡器
  5. js获取浏览器和屏幕宽高等信息(转)
  6. mysql参数化查询为什么可以实现_为什么参数化SQL查询可以防止SQL注入?
  7. Java技术学习心得
  8. bootstrap-干货小结
  9. Exchange Server 2010全新部署
  10. 51nod 1378 夹克老爷的愤怒(树型dp+贪心)
  11. AUFN Carplay盒子固件级视频及图文教程!
  12. 英雄联盟 League of Legends for Mac(LOL美服)
  13. 7 Papers Radios | 矩阵乘法无需相乘,速度提升100倍;一个神经元顶5到8层神经网络...
  14. layui设置按钮不可点击_layui upload 模块点击选择文件按钮的禁用与启用功能
  15. 【如何删除taskmer.exe进程灰鸽子木马】
  16. 工作总结02(海报上传模块)
  17. Python Learn 2 -- 高级特性、函数式编程
  18. springIOC原理解析
  19. 从写简历,到面试、谈薪酬的那些技巧和防坑指南
  20. C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html

热门文章

  1. 想做一个SSL代理的集群中,有很多问题需要解决,I am all grateful to you for your advice
  2. 我的世界服务器查延迟指令,服务器新手服主必看指令
  3. 什么水果有利于饭后消化?
  4. 据说是最健康的作息时间表
  5. (附源码)spring boot通用办事流程管理软件 毕业设计211819
  6. 【转】傅里叶分析之掐死教程(完整版)
  7. html5 讯飞离线语音包,讯飞输入法离线语音怎么用?讯飞输入法离线语音开启方法...
  8. JDBC 操作数据库步骤
  9. beyond-光辉岁月-国语谐音歌词
  10. [日常] win10系统设置电脑从不休眠睡眠