1

私は次のものを持っています:

class Trade:
    def __init__(self):
        entry = [0, 1, 2, 3]
        exit = [1, 2, 3, 4]
        met = [0, 0, 0, 0]
        self.stats = zip(entry, exit, met)



t = Trade()

for entry, exit, met in t.stats:
        met = 1

for entry, exit, met in t.stats:
    print(entry, exit, met)

のすべての値metが 1 になることを期待していますが、そうではありません。この理由は何ですか? への変更metが のインスタンスに反映されるようにするにはどうすればよいですかTrade class t? for ステートメントは、元のコピーを反復処理するのではなく、t.stats のコピーを生成しますか?

4

2 に答える 2

6

リストの値をループすると、値がローカル変数に割り当てられます。これらのローカル変数を変更しても、リストに格納されている元の値は変更されません。

呼び出しを使用enumerate()してインデックスを追加し、そのインデックスを使用して元のリストを変更します。

for i, (entry, exit, met) in enumerate(t.stats):
    t.stats[i] = (entry, exit, 1)
于 2013-01-23T16:19:35.970 に答える
2

次のようにします。

t.stats[:] = [(entry, exit, 1) for entry, exit, met in t.stats]

コードが機能しない理由は、met = 1単純metに別の場所を指すように再バインドするためです。これは には影響しませんt.stats

于 2013-01-23T16:21:47.853 に答える