6

我想用基础知识来提高代码的效率。我知道在二进制系统中。当数字的最后一位为 1 时,这是一个奇数,而 0 是偶数。python中如何用这种方式判断一个int数?那python是否提供了任何内置方法来做到这一点?

4

5 回答 5

12

和它与1:

  0000101001000101
  0000000000000001
&
__________________
  0000000000000001

如果你得到1,这个数字是奇数。如果你得到0,这个数字是偶数。虽然这可行,但我会改用模运算符:

>>> 8888 % 2
0
>>> 8881 % 2
1

阅读起来更快更直接:

In [5]: numbers = [random.randint(1, 1000000) for n in range(100000)]

In [6]: %timeit [n & 1 == 0 for n in numbers]
11 ms ± 390 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [7]: %timeit [n % 2 == 0 for n in numbers]
8.05 ms ± 244 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
于 2013-05-05T07:40:59.057 回答
3

你可以&把数字和1,如果你得到0那么数字是偶数,1意味着数字是奇数。

>>> 2 & 1
0
>>> 3 & 1
1
于 2013-05-05T07:41:02.730 回答
2

** Python:最不重要的位方法**

>>> def is_odd(i): return bool(i & 1)

>>> def is_even(i): return not is_odd(i)

>>> [(j, is_odd(j)) for j in range(10)]
[(0, False), (1, True), (2, False), (3, True), (4, False), (5, True), (6, False), (7,     
True), (8, False), (9, True)]
>>> [(j, is_even(j)) for j in range(10)]
[(0, True), (1, False), (2, True), (3, False), (4, True), (5, False), (6, True), (7,   
False), (8, True), (9, False)]
>>> 

看看这是否可以帮助您。

解释:
测试一个整数是偶数还是奇数。解决此任务的方法不止一种:如果语言提供了偶数和奇数谓词,则使用它们。检查最低有效数字。对于二进制整数,i 按位计算,如果 i 是偶数,则 1 等于 0,或者如果 i 是奇数,则等于 1。将 i 除以 2。如果 i 是偶数,余数等于 0。如果 i 是奇数,余数等于 +1 或 -1。使用模同余: i ≡ 0 (mod 2) 如果 i 是偶数。i ≡ 1 (mod 2) 如果 i 是奇数。

于 2013-05-05T07:41:45.247 回答
1

您可以只使用&运算符来检查是否设置了最低位;

a = 77
is_odd = bool(a & 1)
print is_odd              # Prints True

a = 64
is_odd = bool(a & 1)
print is_odd              # Prints False
于 2013-05-05T07:41:43.557 回答
0
# Modular Congruencies #

>> def is_even(i):
    return (i % 2) == 0

>>> is_even(1)
False  
>>> is_even(2)
True
>>>
于 2013-05-05T09:44:39.710 回答