0

アプリケーションで非常に奇妙な結果が得られ続ける理由を理解しようと何時間も苦労してきました。確かに想定されていなかったのに、物事は「オン」になり続けました。次のようなコードセグメントに絞り込みました。

test=[[False]*28]*24

print(test[5][7])
print(test[6][7])
test[5][7]=True
print(test[5][7])
print(test[6][7])

この特定のケースでは、5番目のインデックスの7番目のインデックスの値のみを変更したいのですが、他のさまざまなインデックスも変更されています。これを実行すると、次のようになります。

誤り

誤り

私が得ることを期待している間:

誤り

誤り

誤り

なぜこれが起こっているのか誰かが理解していますか?私は何かを見落としていますか?リストを初期化する方法と関係がありますか?私は本当に24*28のリストをで埋めたいだけですbools = False

4

3 に答える 3

5

この行test=[[False]*28]*24は、28個のFalse値の同じリストへの24個の参照を作成します。あなたはおそらく次のようなものが欲しいでしょう:

test = [ [False]*28 for _ in range(24) ]

これにより、の24の独立したリストが強制的に作成されますFalse


補足として、を検討する必要がありますnumpy

import numpy as np
test = np.zeros((24,28),dtype=bool)
于 2012-10-30T15:29:35.567 に答える
0

それはすべて同じリストだからです。

私のポイントを説明するために、組み込み関数IDを使用します。

id(test[x])

これは、xのすべての有効な値に対して同じ値を返します

于 2012-10-30T15:29:27.687 に答える
0

問題は、ステートメントを発行するときに、a = list[[0]] ]それぞれが「0」を含む他の10個の小さなリストを含むリストを取得できないことです。同じリストの インスタンスが10個含まれているリストを取得し、[0]「1つ」を変更すると「すべて」が変更されます。実際、この場合、すべてが同じです。

于 2012-10-30T15:30:42.100 に答える