1

Python 2.7.xには、以下に示すように、最初の値(インデックスではない)を返す関数が必要な2つのリストがあります。

def first_incorrect_term(polynomial, terms):
    for index in range(len(polynomial), len(terms)):
        if evaluate(polynomial, index) != terms[index-1]:
            return evaluate(polynomial, index)

評価が機能する関数であると仮定しましょう。オブジェクト指向に見えるこれらの3行を、Pythonの「検索」またはそのような関数を使用するものに置き換えたいと思います。

基本的に、私は多項式の数値項を超えて2番目のリストのインデックスを反復処理し(最初のX項が一致すると確信しているため)、それを評価し、期待される項と比較します。項が一致しない最初の例では、評価された多項式を返したいと思います。

Pythonのfind/lambdaなどを使用して、これらの3行の置換を探しています。これは、たとえばリンクで説明されているように、Pythonのパワーを使用していないことが確実にわかるためです。

PS:これはプロジェクトオイラーの問題にいくらか関連していますが、上記のスニペットを使用して解決し、「Python」スキルを向上させたいと思います:)

4

2 に答える 2

1

まず、yield関数のジェネレータ バージョンを作成するために使用します。

def incorrect_terms(polynomial, terms):
    for index in range(len(polynomial), len(terms)):
        eval = evaluate(polynomial,index)
        if eval != terms[index-1]:
            yield (polynomial, index, eval)

次に、最初の結果は最初の不一致です。

mismatches = incorrect_terms(polynomial, terms)
first_mismatch = mismatches.next()

実際には、多項式の長さの後の値ではなく、項のすべての値を反復処理したいと思います。その場合、圧縮できます。

results = (evaluate(polynomial,index) for index in count(0))
pairsToCompare = itertools.izip(results, terms)
mismatches = (pair for pair in pairsToCompare if pair[0] != pair[1])

first_mismatch = mismatches.next()

evaluate(polynomial, n)ここで、 が与えられた多項式の n 番目の項を計算しており、これらが の値と比較されていると仮定しますterms

于 2012-11-09T11:34:30.473 に答える
0

ジェネレーター式を使用してそれを行いますが、1 行にも収まりません。

def first_incorrect_term(polynomial, terms):
    evaled = ((index, evaluate(polynomial, index)) for index in range(len(polynomial), len(terms)))
    return next((val for index, val in evaled if val != terms[index-1]), None)
于 2012-11-09T11:34:17.510 に答える