0

私は本当に問題に行き詰まっています.なぜ出力がそれが何であり、私が期待したものではないのかを完全に理解していません. 私は基本的に、ゼロのみで初期化されたネストされたリストの要素の値を計算したいと考えています。私の問題の単純な形式のコードは次のとおりです。

aa = [[0] * 2] * 2

for i in range(2):
    for j in range(2):
        for k in range(0, 10):
            aa[i][j] += k 

ここで、"aa" の出力は [[45, 45], [45, 45]] になると予想しました。

しかし、出力は [[90, 90], [90, 90]] です。

それはどうしてですか?どんな説明でも役に立ちます。デバッグ後、Python はリスト内の両方のリストに常に k を追加することがわかりましたが、たとえば i は現在 0 です。

4

3 に答える 3

0

リストの要素に乗算を使用したため、K が両方のリストに追加されますaa = [[0] * 2] * 2。2 を掛けると、参照も再現されます。そのため、両方のリストで同じ結果が得られます。

リスト内包表記を使用して、この問題を回避できます。

aa = [[0]*2 for i in range(2)]     # [[0, 0], [0, 0]]

for i in range(2):
    for j in range(2):
        for k in range(0, 10):
            aa[i][j] += k          # [[45, 45], [45, 45]]
于 2021-07-03T09:53:05.517 に答える