【问题标题】:Preferred method of checking for even number [closed]检查偶数的首选方法[关闭]
【发布时间】:2016-12-04 20:12:27
【问题描述】:

我知道已经存在关于如何检查某物是否均匀的问题。

我想知道官方的偏好(如果有的话)以及检查偶数/奇数的最佳执行方式是在哪里

  • 如果数字是偶数,则计算结果为 True
  • 如果数字是奇数,则计算结果为 False

我知道的方法有

  • number % 2 == 0
  • not number % 2
  • not number & 1

我的问题

  • 官方首选的方法是什么? (如果适用)
  • 这样做的有效方法是什么? (性能方面)

【问题讨论】:

  • 请解释您的反对意见,以便我改进。
  • 确实是个好问题,我从来没有这样想过。因为你的问题,今天学到了一条新信息。谢谢:)

标签: python python-3.x math bit-manipulation


【解决方案1】:

我已经看过所有这些,所以哪个是最好的还有待商榷。如果您想清楚,number % 2 == 0 可能是代码和目的之间最接近的匹配。这清楚地找到了除以2时的余数。其他人可能不同意,所以这个问题没有明确的答案。

最快的方法是not (number & 1)。在 iPython 中使用 %timeit 类似

%timeit for number in range(1000): number % 2 == 0

给我:

number % 2 == 0: 149 µs per loop
not number % 2: 130 µs per loop
not (number % 2): 132 µs per loop
not number & 1: 106 µs per loop
not (number & 1): 107 µs per loop

尽管有这些数据,但我在我的一个项目中进行了类似且涉及更多的测试,并且最后一个通常比倒数第二个更快。请注意,由于操作顺序,括号确实会在一定程度上影响速度。

【讨论】:

  • 有官方标准的“首选”或“pythonic”方式吗?
  • 正如我所写的,我在实际使用中看到了所有这些技术,并且我自己也想知道同样的事情。我所有的证据都表明没有任何公认的首选方式。
【解决方案2】:

更容易理解的方式(因此更pythonic)

 number % 2 == 0

稍微更优化的方式

not number & 1

它们的计算成本几乎相似,所以我推荐%

有关性能的更多详细信息,请查看post

【讨论】:

  • 我只是在询问给定的 int number 而不是数字列表。你是说首选方式是number % 2 == 0
  • Python 未编译,因此这些优化参数并不真正适用。
  • 使用列表仅作为示例。这真的没关系,但我更喜欢number % 2 == 0,因为它很容易理解,也是我的看法。我添加了一个 SO 帖子的答案,您可以考虑看看。
  • 我对优化的评论是对链接答案的回应。
  • @timotree 我知道 python 不会编译代码。我已经用一个新的链接答案更新了我的答案,看看那个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多