0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】二次元リストの初期化にはリスト内包表記を使う

Last updated at Posted at 2023-03-16

paizaを触って1か月、レート2000に到達しました。
実装言語にはPythonを使っていたのですがこの機会にいくつか備忘録を残します。
image.png

使用言語:Python 3.11.2

結論

多次元リストの初期化にはリスト内包表記を活用する

[[0]*3 for _ in range(4)]

Python Documentation contents にて同内容の説明が掲載されている
https://docs.python.org/ja/3/faq/programming.html#how-do-i-create-a-multidimensional-list

※ コメントにてご教示いただきました。ありがとうございます。

また明確な意図がない限り下記表現は使わない

[[0]*3] * 4

サンプル(OKパターン)

4×3サイズの0埋めリストを初期化する場合

test.py
# 二次元リストnizi_listの初期化
ROWS,COLUMNS=4,3
nizi_list = [[0]*ROWS for _ in range(COLUMNS)]
print("■nizi_listの初期化後の中身");print(*nizi_list, sep='\n');print()

# 各リストのオブジェクトIDの確認
print("■nizi_listの各リストのオブジェクトIDの確認")
for i in range(COLUMNS):
    print("nizi_list[%d]のオブジェクトID: %d"%(i,id(nizi_list[i])))
print()

# 二次元リストnizi_listの要素の変更
nizi_list[0][1] = 1
print("■nizi_list[0][1]の値変更後の中身");print(*nizi_list, sep='\n');print()
実行結果
■nizi_listの初期化後の中身
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]

■nizi_listの各リストのオブジェクトIDの確認
nizi_list[0]のオブジェクトID: 1936982372288
nizi_list[1]のオブジェクトID: 1936982416256
nizi_list[2]のオブジェクトID: 1936982411712

■nizi_list[0][1]の値変更後の中身
[0, 1, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]

サンプル(NGパターン)

4×3サイズの0埋めリストを初期化する場合

test.py
#二次元リストnizi_listの初期化
ROWS,COLUMNS=4,3
nizi_list = [[0]*ROWS] * COLUMNS
print("■nizi_listの初期化後の中身");print(*nizi_list, sep='\n');print()

#(以下略)
test.py実行結果のログ
■nizi_listの初期化後の中身
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]

■nizi_listの各リストのオブジェクトIDの確認
nizi_list[0]のオブジェクトID: 2893548518592
nizi_list[1]のオブジェクトID: 2893548518592
nizi_list[2]のオブジェクトID: 2893548518592

■nizi_list[0][1]の値変更後の中身
[0, 1, 0, 0]
[0, 1, 0, 0]
[0, 1, 0, 0]
  • nizi_list[0][1] のみ代入したつもりが nizi_list[1][1]nizi_list[2][1] にも反映された
    • これは nizi_list[0]nizi_list[2] が全て同オブジェクトとして定義されたため
    • オブジェクトIDはid関数を用いることで参照可能
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?