私は次のようなスパイラル形式で1から9の値を印刷しようとしています:
[1,2,3]
[8,9,4]
[7,6,5]
ただし、Pythonスクリプト(以下に記述)を使用して印刷しようとすると、上書きされます。正しいインデックスと値を取得します。値を正しいインデックスに割り当てることができません。スクリプトは次のとおりです。
n = 3
res = [[0]*n]*n
count = 1
def getcoord(r1,c1,r2,c2):
for c in range(c1, c2+1):
yield r1, c
for r in range(r1+1, r2+1):
yield r,c2
if r1 < r2 and c1 < c2:
for c in range(c2-1, c1-1, -1):
yield r2,c
for r in range(r2-1, r1, -1):
yield r, c1
r1 = 0
r2 = n-1
c1= 0
c2 = n-1
val = 1
while r1<=r2 and c1<=c2:
for r,c in getcoord(r1,c1,r2,c2):
print(r,c)
print("val", val)
res[r][c] = val
print("res", res)
val += 1
r1 += 1; r2 -= 1
c1 += 1; c2 -= 1
return res
デバッグしようとすると、次のような出力が得られます。
(0, 0)
('val', 1)
('res', [[1, 0, 0], [1, 0, 0], [1, 0, 0]])
(0, 1)
('val', 2)
('res', [[1, 2, 0], [1, 2, 0], [1, 2, 0]])
(0, 2)
('val', 3)
('res', [[1, 2, 3], [1, 2, 3], [1, 2, 3]])
(1, 2)
('val', 4)
('res', [[1, 2, 4], [1, 2, 4], [1, 2, 4]])
(2, 2)
('val', 5)
('res', [[1, 2, 5], [1, 2, 5], [1, 2, 5]])
(2, 1)
('val', 6)
('res', [[1, 6, 5], [1, 6, 5], [1, 6, 5]])
(2, 0)
('val', 7)
('res', [[7, 6, 5], [7, 6, 5], [7, 6, 5]])
(1, 0)
('val', 8)
('res', [[8, 6, 5], [8, 6, 5], [8, 6, 5]])
(1, 1)
('val', 9)
('res', [[8, 9, 5], [8, 9, 5], [8, 9, 5]])
ここで何が欠けていますか?両方を持っていても、正しいインデックスに正しい値を割り当てることができないのはなぜですか? 前もって感謝します!
回答 1 件
関連記事
- Python出力(Unicode、UTF-8、さまざまなPythonバージョン)を理解するのに苦労しています
- PowerShell出力をPythonに変換し、変数に保存します
- C#を使用したユーザー入力は、Python出力をC#に表示します
- Python:一連の条件ステートメントの結果に応じて、特定の列に要素を出力するにはどうすればよいですか?
- 提供されたデータを使用してマトリックスを作成するPython
- 行列pythonnumpyのオフセットを変更する方法
- 最長のリストを圧縮し、出力を揃えます。 pythonitertoolsを最初から
- Pythonで行列テーブルの値にアクセスする方法
- Pythonで行列を二乗する
- Python:3番目に依存する2つの変数の合計を持つ行列
[0]*n
3つのゼロを含むリストを作成します:[0, 0, 0]
。次に、
res = [[0]*n]*n
res
という名前のリストを作成します 、3回含まれています同じ 上記で作成したリスト。したがって、
res[0]
という名前で参照するかどうか 、res[1]
またはres[2]
、常に同じ一意のリストにアクセスします。res[0][0] = 1
を行う このリストの最初の要素res[2][0] = 7
を更新します 同じ要素を再度更新します。res
を印刷する場合 、この同じリストの3倍になります。必要なのは3つの異なるリストです。次のように作成できます。