我很好奇地发现最快的算法是什么用于返回Python 3中整数中最低有效位的位置。
在Python 3中是否有比该算法更快的算法?可以使用任何增强功能来加快速度吗?
def lsb(n):
temp = n & -n
pos = -1
while temp:
temp >>= 1
pos += 1
return(pos)
最佳答案
总结一下,因为这是针对python3的,所以不是return index of least significant bit in Python的精确副本(尽管那里还有其他适用的答案,但也许有些更好):
jcomeau@aspire:/tmp$ cat lsb.py
#!/usr/bin/python3
import math, sys
def lsb0(n):
temp = n & -n
pos = -1
while temp:
temp >>= 1
pos += 1
return(pos)
def lsb1(n):
return int(math.log2(n & -n))
def lsb2(n):
return (n & -n).bit_length() - 1
if __name__ == '__main__':
algorithm = sys.argv[1]
lsb = eval('lsb{n}'.format(n = algorithm))
for n in range(1, 1000000):
#print(lsb(n))
lsb(n)
正如aaron_world_traveler观察到的,Mark Dickinson的答案是最快的。
jcomeau@aspire:/tmp$ time lsb.py 0
real 0m2.506s
user 0m2.472s
sys 0m0.024s
jcomeau@aspire:/tmp$ time lsb.py 1
real 0m3.336s
user 0m3.284s
sys 0m0.040s
jcomeau@aspire:/tmp$ time lsb.py 2
real 0m1.646s
user 0m1.636s
sys 0m0.008s