重複の可能性:
2 の累乗の数値のリストを返す方法は?
私が知っているのは次のとおりです。
l = []
for i in range(2, n=2):
l.append(1**2)
return l
方程式全体を用意する必要はありません。このような方程式を作成する方法の基本を知る必要があるだけです。
これのことですか?
def get_powered_vals(endVal):
return [2**val for val in xrange(endVal+1)]
get_powered_vals(4)
>>> [2,4,8,16]
またはリスト内包表記なし:
def get_powered_vals(endVal):
vals = []
for val in xrange(endVal+1):
vals.append(2**val)
print val, vals[-1]
return vals
get_powered_vals(4)
>>> 1, 2
>>> 2, 4
>>> 3, 8
>>> 4, 16
>>> [2,4,8,16]
非効率な累乗の代わりに、最後に計算された値を取り、それを 2 で乗算します。
関数として:
>>> def powers(n):
... ret = [1]
... while len(ret) < n:
... ret += [ret[-1]*2]
... return ret
...
>>> powers(10)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
ジェネレーターとして:
>>> def gen_powers(n):
... last = 1
... while n:
... yield last
... last *= 2
... n -= 1
...
>>> list(gen_powers(10))
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
コードゴルフのワンライナーとして:
reduce(lambda a,b:a+[2*a[-1]],range(10),[1])
このようなもの?
def powers(n):
return [2**i for i in range(1, n+1)]
(詳細)
これは同じ方法ですが、for ループを使用します。
def powers(n):
l = []
for i in range(1, n+1):
l.append(2**i)
return l
上記のコード スニピットは、次の理由で機能しませんでした。
l.append(1**2)
1 の 2 乗で、常に 1 に等しくなります。おそらくl.append(2**i)
、変数の 2 乗であるを実行するつもりでした。i
範囲の使い方が間違っています。範囲を指定するにはいくつかの方法があります
range(stop) # Start のデフォルトは 0
range(start, stop)
range(start, stop, step) # 指定しない場合、step のデフォルトは 1