0

基本上,我如何在列表理解中编写相同的函数?

def blah(n):
    if n <= 1:
        return 1
    return n + blah(n/2)

print blah(32)

除了向自己证明列表理解中任何范围的自定义步骤实际上是可能的之外,我真的不需要这个。

4

3 回答 3

5
import math
def lcsum(n):
    return sum([n>>i for i in range(int(math.log(n, 2))+1)])
于 2013-05-10T12:20:49.513 回答
4

您需要生成减半数字的序列:

def halved(n):
    while n:
        yield n
        n >>= 1

然后使用把它变成一个列表:

list(halved(32))

或者直接总结:

sum(halved(32))

您必须使用math.log()将其转换为range()合适的值:

import math
sum(n >> i for i in range(int(math.log(n, 2)) + 1))
于 2013-05-10T12:17:53.460 回答
1

如果你真的想要某种列表理解,我会这样写:

import math

def sumOfNHalf( n ):
   return sum( [ 2**x for x in range( 0, int( math.log( n, 2 ) + 1 ) ) ] )
于 2013-05-10T12:21:12.890 回答