关于列表解析和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回答
-
看你的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))
结果还是列表解析要快一些
122018-04-18 -
ywang04
2016-09-19
最好贴图上来吧
00
相似问题
filter性能问题
回答 3
函数输出的timeit的时间反而少
回答 1