首先我们创建一个列表
1 | import random |
执行结果为:
1 | [-1, 0, 8, 3, 5, 0, 4, 0, -2, 5] |
现有一个需求, 需要在这个列表中筛选出大于0的数字, 以下给出四种实现方式
第一种方法: 循环迭代
1 | l2 = [] |
执行结果为:
1 | 1500915233.146998 |
得到结果需要的时间为0.000018
第二种方法: filter函数
1 | print(time.time()) |
执行结果为:
1 | 1500915233.147029 |
得到结果需要的时间为0.000010
第三种方法: 列表解析式
1 | print(time.time()) |
执行结果为:
1 | 1500915233.14705 |
得到结果需要的时间为0.000006
第四种方法: 生成器表达式
如果列表数据量巨大, 应该考虑的不是使用列表解析器, 而是生成器表达式
1 | print(time.time()) |
执行结果为:
1 | 1500916299.74144 |
得到结果需要的时间为0.000005
总结:
通过以上的四种实践方式得出, 使用循环迭代的方式性能最低, 小数据量时, 使用列表解析式是最好的选择; 如果数据量巨大, 应该使用生成器表达式生成一个可迭代对象提供使用
备注:
列表解析
[expr for iter_var in iterable if cond_expr]
生成器表达式
(expr for iter_var in iterable if cond_expr)
两者的语法非常相似, 但生成器表达式返回的不是一个列表类型对象, 而是一个生成器对象, 生成器是一个内存使用友好的结构