質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4066閲覧

多次元リストの要素を変更したい

sysj

総合スコア12

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/12/05 02:39

#オセロの盤面を多次元リストで表したい

何も置かれていない状態の生成

small_list = [] for i in range(8): small_list.append('N') big_list = [] for i in range(8): big_list.append(small_list) for i in big_list: print(i)

実行結果

['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N']

初期状態を設定

big_list[3][3] = 'W' big_list[3][4] = 'B' big_list[4][3] = 'B' big_list[4][4] = 'W'

実行結果(期待と違う)

['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N']

期待したい実行結果

['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'W', 'B', 'N', 'N', 'N'] ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'] ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N']

期待したい実行結果を得られる書き方をご教授下さい。
当方paiza.io上で実行しております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じですかね。

Python

1from pprint import pprint 2 3field = [['N' for _ in range(8)] for _ in range(8)] 4# field = [list('N' * 8) for _ in range(8)] # これでも可 5field[3][3] = 'W' 6field[3][4] = 'B' 7field[4][3] = 'B' 8field[4][4] = 'W' 9 10pprint(field) 11 12"""実行結果 13[['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'], 14 ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'], 15 ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'], 16 ['N', 'N', 'N', 'W', 'B', 'N', 'N', 'N'], 17 ['N', 'N', 'N', 'B', 'W', 'N', 'N', 'N'], 18 ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'], 19 ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'], 20 ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N']] 21"""

原因

Pythonで非常によく見る失敗例です。
Qiita - Python のリストの扱いで注意すること

ご提示のコードの末尾でidを見てみると理由は明白です。
註: 実行時によって結果は異なります。しかし、全てのidが揃うのは間違いないです。

Python

1>>> for row in big_list: 2... print(id(row)) 3... 42009502115080 52009502115080 62009502115080 72009502115080 82009502115080 92009502115080 102009502115080 112009502115080

投稿2017/12/05 02:44

編集2017/12/05 02:57
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sysj

2017/12/05 03:05

これのことです! 迅速かつ的確な回答、誠に感謝いたします! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問