簡體   English   中英

列表推導返回n / 2…之和?

[英]List comprehension to return the sum of n/2…?

基本上,我該如何在列表理解中編寫相同的函數?

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

print blah(32)

除了向自己證明列表理解中任何范圍的自定義步驟實際上是可能的之外,我實際上並不需要此。

import math
def lcsum(n):
    return sum([n>>i for i in range(int(math.log(n, 2))+1)])

您需要生成減半數的序列:

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))

如果您真的想在其中進行列表理解,我會這樣寫:

import math

def sumOfNHalf( n ):
   return sum( [ 2**x for x in range( 0, int( math.log( n, 2 ) + 1 ) ) ] )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM