【问题标题】:How to write an efficient divisibility test?如何编写有效的可分性测试?
【发布时间】:2016-04-17 13:00:52
【问题描述】:

Python Koans 中的问题指定“如果列表 xs 中的任何数字可以被 3 整除,则返回 True。否则,或者如果列表为空,则返回 False。”

到目前为止,我已经写了return any(x % 3 == 0 for x in xs),但这只给了 2/3 星。

【问题讨论】:

  • xs 是不是你预先设置的?是生成器还是列表?
  • 获得第三颗星的if the list is empty, return False 部分在哪里?
  • 我试过 return any(x % 3 == 0 for x in xs) if xs else False 但那也是 2/3 星
  • 仅供参考:any(not x%3 for x in xs)

标签: python list python-2.7


【解决方案1】:

您的实施对于大量数据不是很有效。可能还不够快?

对于可被三整除的特殊情况,您可以计算要测试的数字中的数字之和。如果总和能被三整除,那么你开始的数字也是如此。

例如

4789 => 4+7+8+9=28 => 2+8=10 => 1+0=1(不能被三整除)

4788 => 4+7+8+8=27 => 2+7=9(9 可以被三整除,因此 4788 也是如此)

【讨论】:

  • hmm.. 没错,检查被 3 整除的基本数学技巧。但是您如何尝试从数字中提取数字?
  • 嗯,有几种方法 :) 你可以这样做(int(x) for x in str(4788))
  • 好吧,我对 python 了解不多,但它们可能在内部像模式 10 或除以 10 那样在循环中进行。它比单一模式效率高 3 倍吗?除非数字真的很大,我们将其存储在数组或字符串中,在这种情况下,我们将通过索引访问数字。
  • 除法比加法昂贵得多。所以这种方法效率更高。但它只会在非常大的数字中引人注目。我不知道你在处理什么数据,所以我无法告诉你差异是否显着。
  • 一个测试用例是 (0,1,2,...9) 的列表
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多