我注意到确定数字是否在python中的最常用方法是x%2
。 x&1
会不会更快?它有什么缺点?
答案 0 :(得分:3)
x&1
的速度要快得多,但对大多数程序员来说,它的可读性也不那么快。按位并且倾向于向我建议你正在处理位串,而modulo建议使用数字运算,因此除非你正在编写一个需要尽可能快的库函数,否则我将会这样做。 d倾向于选择x%2
表达。
In [1]: import numpy as np
In [2]: l = np.random.randint(0, 100, 100)
In [3]: %timeit [x%2 for x in l]
100000 loops, best of 3: 18.3 µs per loop
In [4]: %timeit [x&1 for x in l]
100000 loops, best of 3: 15.5 µs per loop
In [5]: [x&1 for x in l] == [x%2 for x in l]
Out[5]: True
答案 1 :(得分:0)
%2
在除以2时检查数字的模数,换句话说,它检查提醒是1还是0,而&1
是按位运算符检查最后一位是否相同。按位运算符 IS 略快,但差别可以忽略不计。
IMO我认为%2
被更多使用的原因是因为这对于尚未完全研究位和运算符的普通python程序员更有意义,所以解释%2
vs {{1 } {},&1
更加用户友好。