次のようなタプルのリストがあります
a = [(1, 2), (2, 2), (3, 2)]
このリストの長さはさまざまです。順序は逆にすることもできます。
a = [(3, 2), (2, 2), (1, 2)]
次のようなリストのリストもあります。
b = [['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0'], ['0', '0', '0']]
ここで、このリストのリストをループして、インデックスを持つアイテムを変更したいと思います。
b[3][2]
b[2][2]
b[1][2]
したがって、インデックスは a に依存します。私はこれを試しました:
for item in indexes_list:
b[item[0]][item[1]] = '1'
しかし、これは最後の列全体を変更します(最後の列の最後の3つの項目のみをaで指定されたインデックスで変更したい)。これを達成するための最良の方法は何ですか?
編集:回答ありがとうございますが、私にはうまくいきませんでした。私は両方を試しましたが、同じことが起こります。問題を単純化しようとしたため、indexs_listでもその間違いを犯しました(タイプミスでした)。私はさらに詳しく説明する必要がありました。
リストのリストは、ある種の三目並べボード用です。ユーザーが入力した動きが相手の駒を挟むかどうかをテストする必要があります。3×3の盤である必要はないので、相手の複数の駒を挟むようなロングムーブが可能です。移動が相手の駒を挟む場合、相手の駒は消滅し、ユーザーの駒に置き換えられます。
両方の方法を試すと、最初に for ループを通過した後、列全体に対してすばやく実行されます (ブレークポイントを配置してデバッグすると、これが検出されました)。ここに私のプログラムのコードがあります:
for i, j in (indexes[0])[:len(y_p.rstrip('.'))]:
print item
board[i][j] = user
print board
print ステートメントを使用して、デバッグ中に何が起こるかを確認しました。ユーザーは、ユーザー ピースの str 値を保持する変数です。rstrip メソッドは、どこまで移動すべきかを検出するために使用されます。
デフォルトでは、ボードは次のとおりです。
[['.', '.', '.', '.', '.'], ['.', 'X', 'O', '.', '.'], ['.', 'O', 'X', '.', '.'], ['.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.']]
y_p プリント
'.OX.' # board[3][1] + board[2][1] + board[1][1] + board[0][1]
インデックス[0] プリント
[(3, 1), (2, 1), (1, 1), (0, 1)]
しかし、私はそれをしたいだけです
[(3, 1), (2, 1), (1, 1)]
board[0][1] 座標が空のスペースを定義しているため (無効)。このリストの最初にある座標ボード[3][1]は、ユーザーが移動したい場所です。board[2][1] は対戦相手の駒、board[1][1] はユーザーの駒です。したがって、座標によって定義されたピースを回転させる必要があります
[(3, 1), (2, 1), (1, 1)]
ユーザーの作品に。ただし、代わりにこれらの座標に対して実行します (これは 5x5 ボードであることに注意してください)。
[(4,1), (3, 1), (2, 1), (1, 1)]
そのため、最初のインデックス リストに含まれていなくても、board[4][1] でさえ変更されます。実行後、ボードは次のようになります。
[['.', 'X', '.', '.', '.'], ['.', 'X', 'O', '.', '.'], ['.', 'O', 'X', '.', '.'], ['.', 'X', '.', '.', '.'], ['.', 'X', '.', '.', '.']]
これは正しくありません (最初と最後の行の「X」は存在しないはずです)