在一行中将数​​字减半

qwe*_*url 2 python list-comprehension

我正在努力实现的目标:

l = []
n = 100
while (n):
    l.append(n//2)
    n //= 2
    
print(l)
# [50, 25, 12, 6, 3, 1, 0]
Run Code Online (Sandbox Code Playgroud)

我试过的:

>>> from itertools import takewhile
>>> n = 100
>>> [(n := n//2) for _ in takewhile(lambda x: x > 0, [n] * n)]
[50, 25, 12, 6, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, ... 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

这显然行不通,而且我也不喜欢创建大小数组的想法n......

Man*_*nby 6

from math import log2, floor
n = 100
l = [n//(2**x) for x in range(1, floor(log2(n))+2)]
Run Code Online (Sandbox Code Playgroud)

这将l作为[50, 25, 12, 6, 3, 1, 0]. 如果您不想要 0,请将 更改+2+1