リストにシーケンスを生成したいのですが、for ループを使用してこれを行う方法は知っていますが、以前に生成された要素が次の要素に含まれるようにリストを生成したい場合、どうすればよいでしょうか? よくわからない
つまり、その項目が次のようになるようなリストを生成します。
ここで、x は単なる記号です
[x,(x)*(x+1),(x)*(x+1)*(x+2)]
それよりも[x,x+1,x+2]
どんな助けでも大歓迎です!
リストにシーケンスを生成したいのですが、for ループを使用してこれを行う方法は知っていますが、以前に生成された要素が次の要素に含まれるようにリストを生成したい場合、どうすればよいでしょうか? よくわからない
つまり、その項目が次のようになるようなリストを生成します。
ここで、x は単なる記号です
[x,(x)*(x+1),(x)*(x+1)*(x+2)]
それよりも[x,x+1,x+2]
どんな助けでも大歓迎です!
私はこの種のものにジェネレーターを使用するのが好きです。
def sequence(x, N):
i = 0
result = 1
while i < N:
result *= (x + i)
i += 1
yield result
>>> list(sequence(5, 10))
[5, 30, 210, 1680, 15120, 151200, 1663200, 19958400, 259459200, 3632428800L]
numpy がインストールされている場合、これはより高速です。
np.multiply.accumulate(np.arange(x, x + N))
計算は無駄だが、仕事はやり遂げる
from operator import mul
z = range(5, 11)
print z
[5, 6, 7, 8, 9, 10]
[reduce(mul, z[:i]) for i in range(1, len(z))]
[5, 30, 210, 1680, 15120]
for 内包表記とカスタム演算子を使用した、より慣用的なハッキング:
def n(a):
global previous
previous = a
return a
[n(previous * (x+i)) for previous in [1] for i in range(0,3)]
x == 1 の場合、
[1, 2, 6]