关于列表解析和filter()性能问题

来源:2-1 如何在列表, 字典, 集合中根据条件筛选数据

努力and努力

2016-08-23

您好,自己测试的时候都是filter()性能高于列表解析,和您说的列表解析性能更好恰恰相反,请帮忙解答,谢谢

print(timeit.timeit('[ x for x in data if x>=5]', setup='data=[1, -2, 3, 10, 5, 9, 7, 5, 10 ]', number=1000000))
print(timeit.timeit('filter(lambda x:x>=5, data)', setup='data=[1, -2, 3, 10, 5, 9, 7, 5, 10]', number=1000000))

第一次运行结果:

0.73239630962435

0.23418407692864984

第二次运行结果:

0.7318548722579014

0.21855996092435004


写回答

2回答

DessLi

2016-10-19

看你的print写法用的是python3,在python3中filter不再返回列表而是返回一个迭代器。所以你应该这样测试

print(timeit.timeit('list(filter(lambda x:x>=5, data))', setup='data=[1, -2, 3, 10, 5, 9, 7, 5, 10]', number=1000000))

结果还是列表解析要快一些

1
2
玖月的雾
返回的是filter object,不是迭代器。
2018-04-18
共2条回复

ywang04

2016-09-19

最好贴图上来吧

0
0

Python高效编程技巧实战

精选50个Python案例,源自实战,全面提升Python编程能力

2582 学习 · 360 问题

查看课程