列表解析式与生成器表达式
列表解析式 && 生成器表达式
本文通过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
列表解析式与生成器表达式相关推荐
- Python进阶3——列表解析式和生成器表达式
列表解析式相比循环更加简介易读 abc='abcdef' codes1=[] for code in abc:codes1.append(ord(code))#返回字符对应的十进制数.codes2=[ ...
- [转载] Python中的解析式和生成器表达式
参考链接: Python | 生成器表达式 解析式和生成器表达式 列表解析List Comprehension 语法 [返回值 for 元素 in 可迭代对象 if 条件]使用中括号[],内部是for ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- 列表解析和生成器表达式
列表解析(List comprehensions,或者缩略为list comps)来自函数式编程语言Haskell,可以用来动态创建列表. [expr for iter_var in iterable ...
- python关键字列表的表达式,python 列表推导和生成器表达式的使用
序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...
- Python 列表推导 、生成器表达式与声明式编程
1.****列表推导********* 用到函数的一个常见的操作是将其用于列表的所有项,并使用结果创建一个新的列表.例如: # coding=utf-8 ''' ****列表推导********* 用 ...
- mysql数据字典生成器_「python技术」列表推导、生成器表达式和字典推导的差异及其示例
#开往春天新创作大赛# 前言 列表推导式构建列表的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.自python2.7以后,列表推导和生成器表达式的概念就应用到了字典上,所以就有了字典推导, ...
- python天天向上代码解析-python列表解析和生成器表达式
列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析.列表解析表达式为: [expr for iter_var in iterable] [expr for iter_var in iter ...
- 列表推导和生成器表达式
1 概念解释 列表推导是构建列表的快捷方式,生成器表达式可以用来创建其他任何类型的序列. 列表推导:放在方括号里的表达式,使用关键字for与in,通过处理和过滤一个或多个可迭代对象里的元素构建列表. ...
- python列表解析式如何使用_python列表解析式,生成器,及部分内建函数使用方法...
标准库datetime 需要导入datetime模块: import datetime datetime模块: 对日期,时间,时间戳的处理 datetime的类方法 today () now(tz= ...
最新文章
- Nat. Commun. | 深度学习探索可编程RNA开关
- android ajax 跨域更新本地html,本地webapp是怎么解决跨域问题的?
- nginx安装包_安装nginx与fastdfs-nginx-module
- 通信电子线路期末复习第三章正弦波振荡器
- js获取浏览器和屏幕宽高等信息(转)
- mysql参数化查询为什么可以实现_为什么参数化SQL查询可以防止SQL注入?
- Java技术学习心得
- bootstrap-干货小结
- Exchange Server 2010全新部署
- 51nod 1378 夹克老爷的愤怒(树型dp+贪心)
- AUFN Carplay盒子固件级视频及图文教程!
- 英雄联盟 League of Legends for Mac(LOL美服)
- 7 Papers Radios | 矩阵乘法无需相乘,速度提升100倍;一个神经元顶5到8层神经网络...
- layui设置按钮不可点击_layui upload 模块点击选择文件按钮的禁用与启用功能
- 【如何删除taskmer.exe进程灰鸽子木马】
- 工作总结02(海报上传模块)
- Python Learn 2 -- 高级特性、函数式编程
- springIOC原理解析
- 从写简历,到面试、谈薪酬的那些技巧和防坑指南
- C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html
热门文章
- 想做一个SSL代理的集群中,有很多问题需要解决,I am all grateful to you for your advice
- 我的世界服务器查延迟指令,服务器新手服主必看指令
- 什么水果有利于饭后消化?
- 据说是最健康的作息时间表
- (附源码)spring boot通用办事流程管理软件 毕业设计211819
- 【转】傅里叶分析之掐死教程(完整版)
- html5 讯飞离线语音包,讯飞输入法离线语音怎么用?讯飞输入法离线语音开启方法...
- JDBC 操作数据库步骤
- beyond-光辉岁月-国语谐音歌词
- [日常] win10系统设置电脑从不休眠睡眠