我有以下使用位移位的 C for 循环,我想在 python 中重新实现。
n = 64
for(int stride = n>>1; stride >0; stride >>=1)
{...
Run Code Online (Sandbox Code Playgroud)
那么哇,这个循环在 python 中看起来会怎么样?
我知道n>>1
代表除以 2,但我发现很难用 来建模range()
。
想得更简单:
>>> n = 64
>>> while n:
... print n
... n = n >> 1
...
64
32
16
8
4
2
1
Run Code Online (Sandbox Code Playgroud)
阿马丹的回答很正确。
如果您经常使用此模式,我会将其提取到一个简单的生成器函数中,以便在for
循环中重用:
>>> def strider(n):
... stride = n >> 1
... while stride > 0:
... yield stride
... stride >>= 1
...
>>> for n in strider(64):
... print n
...
32
16
8
4
2
1
Run Code Online (Sandbox Code Playgroud)