找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 12285|回复: 1

[原创代码] python统计0到n之间1的个数.py

[复制链接]
发表于 2016-4-1 09:27:28 | 显示全部楼层 |阅读模式
  1. """
  2. python统计0到n之间1的个数.py
  3. http://www.acmerblog.com/count-ones-6202.html
  4. codegay 2016年4月1日 09:08:10
  5. 傻傻暴力算
  6. """
  7. def ff1(n):
  8.     #数字转成字符串,然后统计字符串的数量,最后sum相加得到结果
  9.     result=sum([str(r).count("1") for r in range(n+1)])
  10.     print(result)
  11.     return result
  12. ff1(99999999)
  13. #80000000
  14. #[Finished in 56.1s]
复制代码
 楼主| 发表于 2016-4-1 10:30:14 | 显示全部楼层
本帖最后由 codegay 于 2016-4-4 02:52 编辑
  1. #=
  2. julia统计0到n之间1的个数.jl
  3. codegay 2016年4月1日 09:29:23
  4. 写个julia版和python对比下时间
  5. =#
  6. function ff1(n)
  7. result=[length(split(string(r),"1"))-1 for r in 1:n]
  8. result=sum(result)
  9. println(result)
  10. return result
  11. end
  12. ff1(99999999)
  13. #没有找到julia像python count那样直接统计某个字符串数量的方法,吐槽!
  14. #80000000
  15. #[Finished in 24.5s] python版是56s


  16. function ff2(n)
  17. result=[count(x->x==1,digits(r,10)) for r in 1:n]
  18. result=sum(result)
  19. println(result)
  20. return result
  21. end
  22. #ff2(99999999)
  23. #julia0.4.3:
  24. #80000000
  25. #[Finished in 44.7s]
  26. #julia0.4.5
  27. #80000000
  28. #[Finished in 43.2s]

  29. function ff3(n)
  30. result=[count(x->x=='1',string(r)) for r in 1:n]
  31. result=sum(result)
  32. println(result)
  33. return result
  34. end
  35. #ff3(99999999)
  36. #julia0.4.3:
  37. #80000000
  38. #[Finished in 30.3s]
  39. #julia0.4.5:
  40. #80000000
  41. #[Finished in 36.0s]
复制代码
三个计数方法的速度对比.居然是ff1中length(split(string(r),"1"))-1胜出.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:11 , Processed in 0.015742 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表