製作・改造なんでもやっちゃう広くて浅い活動日誌

2017/081234567891011121314151617181920212223242526272829302017/10

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Pythonでプログラミングするにあたり、
二次元配列の初期化と、その後の代入で間違いやすい所をメモしておきます。
(というか、以前メモしていたブログを閉鎖してしまったので再掲です。)

Pythonのリストの要素は値の入れ物ではなく、ポインタとして働くので、
以下のソースのArray1みたいな配列らしきものを作ると
一箇所書き換えただけで、それを参照する部分が全部変わってしまいます。
したがって、Array2のように書くのが正解です。

# m*n2次元配列の初期化

m = 3
n = 5

Array1 = n*[m*[0]]
print Array1
# 出力結果 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

Array1[1][1] = 1
print Array1
# 出力結果 [[0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0]]


Array2 = [[0 for j in range(m)] for i in range(n)]
print Array2
# 出力結果 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

Array2[1][1] = 1
print Array2
# 出力結果 [[0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]



初めてのPython 第3版
初めてのPython 第3版Mark Lutz,夏目 大

Amazonで詳しく見る
関連記事
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://creatornote.blog87.fc2.com/tb.php/17-181bd67c
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。