3

リストにシーケンスを生成したいのですが、for ループを使用してこれを行う方法は知っていますが、以前に生成された要素が次の要素に含まれるようにリストを生成したい場合、どうすればよいでしょうか? よくわからない

つまり、その項目が次のようになるようなリストを生成します。

ここで、x は単なる記号です

[x,(x)*(x+1),(x)*(x+1)*(x+2)]

それよりも[x,x+1,x+2]

どんな助けでも大歓迎です!

4

6 に答える 6

6

私はこの種のものにジェネレーターを使用するのが好きです。

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))
于 2013-06-10T15:36:13.373 に答える
0

計算は無駄だが、仕事はやり遂げる

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]
于 2013-06-10T16:53:09.070 に答える
0

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]
于 2013-06-10T15:58:59.247 に答える