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

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

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

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

Q&A

解決済

2回答

650閲覧

python forループ内と外でリストの中身が変わってしまう

huyu-px

総合スコア1

Python 3.x

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

0グッド

0クリップ

投稿2021/12/24 05:07

前提・実現したいこと

C言語を少しかじっていた初学者です。
以下のプログラムを実行した際に、

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

のように意図した出力が得られないのですが、print(array)で、

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

のような出力を得るためにはどのようにすれば良いのでしょうか。
C, Python共に知識が浅いですが、Cの感覚でプログラムを書いたところこのような結果になったため、質問させていただきます。

該当のソースコード

python

1array = [[0]*10]*2 2for i in range(2): 3 for j in range(10): 4 array[i][j] = i*j 5 print(array[i]) 6print(array)

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

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

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

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

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

guest

回答2

0

ベストアンサー

array[0]とarray[1]が同じオブジェクトになっているので以下のように変更してください。

array = [[0]*10 for i in range(2)] for i in range(2): for j in range(10): array[i][j] = i*j print(array[i]) print(array)

こちらを参考にしてください

投稿2021/12/24 05:41

kyokio

総合スコア560

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

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

huyu-px

2021/12/24 06:45

回答ありがとうございます。 配列宣言の理解が甘かったです。 具体的な解決方法を示していただいたので、ベストアンサーとさせていただきます。
guest

0

公式ドキュメント FAQ なぜ list 'y' を変更すると list 'x' も変更されるのですか?で説明されている問題です。

array[0]とarray[1]が全く同じものなので、一方を変更すればそれはどちらから見ても変わっているからです。

C言語のポインタがわかっているなら、同じメモリ領域を指している二つのポインタの一方からその先のメモリ領域を変更すれば、もう片方のポインタから参照してもその変更結果が見えるのと同じことです。

投稿2021/12/24 05:31

編集2021/12/24 05:34
ppaul

総合スコア24670

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

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

huyu-px

2021/12/24 06:43

配列宣言の理解が足りていなかったです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問