我很好奇地发现最快的算法是什么用于返回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

10-08 11:15