-3

重複の可能性:
function in function

どうすれば関数を作成できますか。1 つだけでなく、すべての悪い値を表示しますか?

def get_bad_results(person_results):
        for i in person_results:
                if i[1]>i[3] or i[1]<i[2]:
                    return i[0]

test_results = [["White blood cells",8.5,2,7],
                ["Neutrophils",5.3,2.5,5],
                ["Red blood cells", 12.4, 9,15]]

a = get_bad_results(test_results)
print a

見せるWhite blood cells

それ以外の

White blood cells, Neutrophils
4

4 に答える 4

4

yieldジェネレーターを生成するキーワードを探しています。

def get_bad_results(person_results):
        for i in person_results:
                if i[1]>i[3] or i[1]<i[2]:
                    yield i[0]

次に、関数の結果を反復処理できます(たとえば、呼び出しlist()てリストを作成します)。リストを直接生成するよりもジェネレーターの方が適しています。これは、値が遅延して生成されることを意味し、多くの場合、よりメモリー効率が高くなります。

ちなみに、インデックス作成iは少し醜いです。この場合、値を解凍すると、コードがはるかに読みやすくなります。

def get_bad_results(person_results):
        for name, age, height, weight in person_results:
                if age > weight or age < height:
                    yield name

(当然、文脈がわからないので、ここで名前を付けました)。

于 2012-11-10T16:58:32.707 に答える
2

この関数は、ステートメントに適合する最初のオカレンスを返します。すべてを返すには、それらをリストに保存し、ループが完了したらリストを返します。

for i in person_results:
    bads = []
    if i[1]>i[3] or i[1]<i[2]:
        bads.append(i[0])
return bads
于 2012-11-10T16:51:03.570 に答える
1

ジェネレーターを使用したくない場合は、悪い要素をリストに追加してから返すことができます。

def get_bad_results(person_results):
    bad_results = []
    for i in person_results:
        if i[1] > i[3] or i[1] < i[2]:
            bad_results.append(i[0])
    return bad_results

または、リスト内包表記を使用します。

def get_bad_results(person_results):
    return [i[0] for i in person_results if i[1] > i[3] or i[1] < i[2]]
于 2012-11-10T16:51:50.450 に答える
0

すでに比較を行っている関数から印刷しないのはなぜですか? その後、追跡するために追加のものは必要ありません

def get_bad_results(person_results):
        for i in person_results:
                if i[1]>i[3] or i[1]<i[2]:
                    print i[0]
于 2012-11-10T16:55:58.873 に答える