0

基本的な質問のようで申し訳ありませんが、どこにも見つかりませんでした。Python 2 では、すべてのステップのリストを格納する独自の出力に 1 変数関数を適用したいと考えています。つまり、f(x) が x*x を返し、2 から反復する場合、取得する必要があります。

[2, 4, 16, 256, 65536, ...]

理想的には、関数f、最初の入力1、および保持したい反復回数を渡す必要があります。

これは、ある意味で、関数型プログラミングの反対でreduceあり、やや似ていると思います。unfold

これを行う単純な方法は、次のように書くことです

out = [2] for x in xrange(5): out.append(f(out[-1]))

これを行うための良いPythonicの方法は何ですか? どうもありがとうございました。

4

2 に答える 2

2

必要なのは「ジェネレーター」です。例えば、

def f(x, n):
    for _ in range(n):
        yield x
        x = x * x

l = list(f(2, 5))

print(l)             # [2, 4, 16, 256, 65536]

または

def f(x):
    while True:
        yield x
        x = x * x

for v in f(2):
    if v > 100000:
        break
    print(v),        # 2 4 16 256 65536
于 2015-02-04T02:36:46.393 に答える
1

理想的には、関数 f、最初の入力 1、および維持したい反復回数を渡す必要があります。

関数、開始値、および反復回数を受け入れる unfold 関数を次に示します。

def unfold(function, start, iterations):
    results = []
    for _ in range(iterations):
        results.append(start)
        start = function(start)

    return results

期待どおりに使用できるもの:

>>> print unfold(lambda x: x*x, 2, 5)
[2, 4, 16, 256, 65536]
于 2015-02-04T02:51:21.793 に答える