私はその可能性何かにwhileループを変換することができる方法があります場合、私は思っていた0 -> num
このループをマップ(lambda x:..)に変換することはできますか?
# Example of how the below works, for clarity
#
# base => [0,1,1,2,1,2,2]
# index => 7
#
# {7} --
# bin(7) : 111
# bin(7-1) : 110
# 111 & 110 : 110 (6)
# append(base[6]+1) : append(3)
# //end 7
#
# base => [0,1,1,2,1,2,2,3]
def countBits(num):
index = 1
base = [0]
while(index <= num):
base.append(base[(index & (index - 1))]+1)
index += 1
return base
から各番号のバイナリ表現に1
秒数をカウントする方法を最適化しようとしていますループされているのではなく、その場で行われますか?私の最初のアイデアは
base.append(map(lambda index: base[(index & (index -1))]+1, num))
base
は変わりません。私はちょうど
map(lambda x:...)
構文が何を理解していないと仮定します。私はそれを数回使って、リスト上で簡単に呼び出しました。
これは実際に動作しますか? – jsbueno
ちょうど1つの例を説明するコメントで更新されました – MrDuk
ループの本体があなたが追加しているものを参照する場合、ループをリスト内包または 'map'式にするのはかなり困難です。 'base.append(base [...])'は、簡単な時間を1つのライナーに変換しない赤いフラグです。 – Kevin