为了账号安全,请及时绑定邮箱和手机立即绑定

更快地处理 3 和 5 的倍数

更快地处理 3 和 5 的倍数

心有法竹 2021-06-06 04:08:12
为什么这种方法更快?x=list(range(0,1000000,3))z=list(range(0,1000000,5))y=list(range(0,1000000,15))%timeit sum(x)+sum(z)-sum(y)24 ms ± 1.25 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)为什么列表理解较慢?%timeit sum([i for i in range(1000000) if i % 3 == 0 or i % 5 == 0])205 ms ± 7.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)我认为列表理解应该更快。有没有其他方法比这两种方法更快?
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

可能有两个部分会减慢第二部分的速度:余数函数 (%) 和必须遍历所有项目。第一个只需要按 3、5 或 15 的倍数向上计数,直到达到数字。

但是,如果你真的想最优化它,你应该只使用整数除法: 1000000//3 + 1000000//5 - 1000000//15

编辑:这不能回答问题,正如 Onyambu 在下面评论的那样。更快的方法是找到平均值并乘以数字。例如,以下将计算小于或等于 1000000 的 3 的倍数之和: ((1000000//3)*(1000000//3 * 3 + 3))//2。找出不超过1000000的3的倍数,然后乘以最大倍数(1000000//3 * 3)和最小倍数(3)的平均值。



查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号