python – 十进制数的二进制邻居

假设我有0到2 ^ L之间的十进制数.这些十进制数中的每一个都可以表示为长度为L的二进制数.我现在对一个函数感兴趣,该函数只取一个十进制数,然后计算所有L个十进制数,二进制表示只在一个位置上有所不同.我对这个问题的最快解决方案感兴趣.

例:

L = 3 – > 0到7之间的数字
F(2)=(0,3,6)
以来
2 = 010 – > 0 = 000,3 = 011,6 = 110

希望你有一个想法,并提前感谢:)

最佳答案 您可以使用位移来执行此操作:

def neighbors(n, bitLength):
    return map(lambda b: n ^ (1 << b), range(bitLength))

>>> print(list(neighbors(2, 3)))
[3, 0, 6]

它们是关于可以用经典计算机完成的最快的数学运算,而对于2的幂,它们是完美的.

点赞