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

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

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

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

Q&A

解決済

2回答

1165閲覧

Python3 多重リストに要素を追加する方法

bern

総合スコア15

Python 3.x

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

0グッド

0クリップ

投稿2019/12/07 01:23

s=[[0], [0], [0], [0]]というリストがあったとき、0番目のリストだけに数字を追加するにはどうすればいいですか?
s[0].insert(0,1)
s[0].append(1)
このように書くと、[[0, 1], [0, 1], [0, 1], [0, 1]]となってしまいます。

ご回答よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

python

1s[0].append(1)

投稿2019/12/07 04:12

WathMorks

総合スコア1582

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

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

0

ベストアンサー

多重リストの作り方にそもそも問題がありそうですね。問題なく作れていれば質問文のやり方で立派に成功します。

このようにして多次元の配列を作ろうとしてしまったことがあるでしょう:

>>> >>> A = [[None] * 2] * 3

これを表示したときには問題なさそうに見えます:

>>> A [[None, None], [None, None], [None, None]]

しかし値を代入すると、その値が複数の場所に現れてしまいます:

>>> A[0][0] = 5 >>> A [[5, None], [5, None], [5, None]]

これは、* を使ったリストの複製がコピーを作らず、存在するオブジェクトへの参照を作るだけだからです。この *3 は長さ 2 の同じリストへの参照を含むリストを作ります。一つの列に対する変更はすべての列に現れますが、これが望んだ結果であることはまずないでしょう。

おすすめの方法は、最初に望んだ長さのリストを作り、それから新しく作ったリストでそれぞれの要素を埋めていくことです:

A = [None] * 3 for i in range(3): A[i] = [None] * 2

これは長さ 2 の異なるリスト 3 つを含むリストを生成します。リスト内包表記も使えます:

w, h = 2, 3 A = [[None] * w for i in range(h)]

多次元のリストを作るにはどうしますか? | プログラミング FAQ — Python 3.8.0 ドキュメント

投稿2019/12/07 01:28

編集2019/12/07 01:29
hayataka2049

総合スコア30933

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

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

bern

2019/12/07 01:39

回答ありがとうございます。 0番目のリストの中に数字を追加したいので、参照先のリンクのコードをもとに下のように書いてみましたが、エラーになりました。 w, h = 2, 3 A = [[None] * w for i in range(h)] print(A[0][0].append(1)) Traceback (most recent call last): File "Main.py", line 6, in <module> print(A[0][0].append(1)) AttributeError: 'NoneType' object has no attribute 'append' どうしたらうまく追加されるのでしょうか?
hayataka2049

2019/12/07 03:45

追加自体は質問文と同様で大丈夫ですよ。
bern

2019/12/07 04:09

[[0, 1], [0, 1], [0, 1], [0, 1]] こうではなく、 [[0, 1], [0], [0], [0]] こうしたいのですが、 s[0].insert(0,1) s[0].append(1) こう書くと [[0, 1], [0, 1], [0, 1], [0, 1]] のようになってしまうので困ってます。
hayataka2049

2019/12/07 04:50

リストの生成だけ回答の方法を用いてください。 [[0] for _ in range(4)] など。
bern

2019/12/07 06:08

w, h = 2, 3 A=[[0] for i in range(4)] print(A[0][0].append(1)) Traceback (most recent call last): File "Main.py", line 6, in <module> print(A[0][0].append(1)) AttributeError: 'int' object has no attribute 'append' こう書いてみましたが、エラーになります。 A[0][0]に1を追加できません。 どうしてでしょうか?
hayataka2049

2019/12/07 06:23

A[0][0]は0ですよ 質問文のままの書き方が正解です。
bern

2019/12/07 09:19

s=[[0], [0], [0], [0]] s[0].insert(0,1) print(s) 上のように書いて、[[1, 0], [0], [0], [0]]と出力されました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問