请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

您好,自己测试的时候都是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 16:38:01

看你的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 回复 有任何疑惑可以回复我~
  • 提问者 努力and努力 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2016-10-20 01:39:00
  • 返回的是filter object,不是迭代器。
    回复 有任何疑惑可以回复我~ 2018-04-18 22:22:08
ywang04 2016-09-19 13:31:11

最好贴图上来吧

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信