您的位置:首页 > 其它

列表解析及生成器表达式的效率问题

2016-04-18 05:48 423 查看
列表解析(List Comprehensions),来自函数式的编程语言Haskell。是一个非常有用,简单而且灵活的工具,可以动态地创建列表。自Python2.0,列表开始加入到Python中,里面有lambda,map,filter等,使Python具备一个很重要的功能:函数式编程。使Python语言有了个革命性的发展.也提供用户一个强大工具,只用一行代码就可以创建包含特定内容的列表。

其基本格式:

[expr 
for  item  in  iterable  if
 condition]

比如下面两个例子,即可以用map, filter等来实现



也可以使用列表解析来实现



列表解析的一个不足就是必要生成所有的数据,用以创建整个列表。这可能对有大量数据的迭代器有负面效应,存在严重效率问题.生成器表达式自Python2.4被引入,与列表解析非常相似,语法也相似。不过它不会真正创建数字列表,而是返回一个生成器,这个生成器在每次计算出一条数据后,把这条数据yield(产生)出来,生成器表达式使用了lazy 

evaluation(延迟计算),所以它在内存使用上更有效。生成器表达式格式:

(expr  for  item
 in  iterable  if  condition)

下面举个例子来说明:

【测试文件】 

准备了四个文件: 1.txt 2.txt 3.txt 4.txt 

文件大小分别为: 10M 100M 1G 10G



【测试内容】测试上述四个文件所有非空字符的数目

【测试项目】列表解析
 VS  生成器表达式

【测试脚本】



【测试结果】



【测试分析】

1. 当数据比较小时,使用生成器表达式所耗时间比列表解析要稍微快些

2. 当数据比较大时,比如接近PC机内存的总量时,用后者速度要快的多!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: