3

私は2つの異なるコードを持っています:

def bar(a):
    return [ x**3 for x in a ]

def cube(a):
    for x in a:
        return x**3

bar(a) を ([1, 2, 3, 4]) と定義すると、出力は [1, 8, 27, 64] になります。キューブ (a) を ([1, 2, 3, 4]) と定義すると、出力は 1 になります。彼らは同じ出力を出すとは思わないのですか?「for x in a」は、a のすべての x が次の反復を行うことを意味しませんか?

4

3 に答える 3

5

ループ内で戻るとリストは作成されず、単に 1 つの値が返され、ループが中止されます。最初の例はリスト内包表記であるため、正しく機能します。リストを作成して返します。

于 2013-10-19T03:38:01.773 に答える
3

これはreturn、2 番目のケースでは for ループの最初の反復からの結果です。

最初のケースでは、リスト内包表記を使用します

def bar(a):
    return [ x**3 for x in a ]

キューブのリストを作成して返す場合、2 番目のケースでは

def cube(a):
    for x in a:
        return x**3

リストの反復処理を開始しますが、最初の反復自体で関数から戻ります。

を使用する同等の方法は次のfor x in aようになります

def cube(a):
    final = []
    for x in a:
        final.append(x**3)
    return final
于 2013-10-19T03:37:47.697 に答える
2

適切な 2 番目のバージョンは、実際には次のとおりです。

def cube(a):
    li = []
    for x in a:
        li.append(x**3)
    return li

あなたが持っているものの代わりに。アイテムのリストを返す必要があります。バージョンは、ループ内の最初の出力アイテムを返すだけです。

より圧縮された形式:

cube = lambda a: [x**3 for x in a]

実際、これを複数回使用していない場合は、リスト内包表記/ジェネレーター構文を直接使用できます。

于 2013-10-19T03:40:25.673 に答える