【发布时间】:2020-08-24 05:30:29
【问题描述】:
我正在寻找一种 Pythonic 方法来计算正整数 n 的二进制表示中尾随零的数量(这将表示 2 的最高幂,它除以 n 没有余数)。
一个简单的解决方案:
def CountZeros(n):
c = 0
while (n % 2) == 0:
n /= 2
c += 1
return c
但是为了以更 Pythonic 的方式来做,我认为我可以利用:
-
bin(n)[2:],它给出了n的二进制表示 -
bin(n)[:1:-1],它给出了n的反向二进制表示
所以我的问题可以简化为计算字符串中尾随零的数量。
有没有单语句的方式来做到这一点?
我的最终目标是用 Pythonic 方法计算 2 的最高幂,它除以 n 而没有余数,因此任何不通过计算字符串中的尾随零来实现这一点的方法也值得赞赏。
【问题讨论】:
-
比较字符串的长度和带零的字符串的长度
stripped?或者也许有一个数学解决方案。 -
所谓的重复似乎是关于计数十进制零(问题并不明确,但所有答案都假设十进制零是什么意思),而这个是关于二进制零。投票重新开放。
-
在 Python 3 中,对于积极的
n,您可以执行(n ^ (n-1)).bit_length()-1,尽管对于n=0,这将评估为 0。如果你想让n=0给1,那么你可以做((n ^ (n-1))>>1).bit_length() -
@TigerhawkT3,你能重新打开这个问题,以便可以发布 PM-2Ring 的比特旋转解决方案作为答案吗?另一个问题是关于十进制零,所以它不是重复的,这个答案在那里不起作用。
标签: python