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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1022閲覧

Python リストに追加, 要素の入れ替え

1236

総合スコア19

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/21 03:35

前提・実現したいこと

一番最後の print(empty) の結果が
[['a', 'b', 'c'], ['b', 'a', 'c']]
となるようにしたいのですがどのようにしたら良いでしょうか?

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

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

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

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

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

guest

回答3

0

empty[0]とempty[1]が同じものなのでそうなります。

python

1>>> empty = [] 2>>> list = ["a", "b", "c"] 3>>> empty.append(list) 4>>> list[0], list[1] = list[1], list[0] 5>>> empty.append(list) 6>>> print(empty) 7[['b', 'a', 'c'], ['b', 'a', 'c']] 8>>> print(empty[0]) 9['b', 'a', 'c'] 10>>> print(id(empty[0])) 111724374042112 12>>> print(empty[1]) 13['b', 'a', 'c'] 14>>> print(id(empty[1])) 151724374042112

別のものにしたければ以下のようにコピーしてください。

python

1>>> empty = [] 2>>> print(empty) 3[] 4>>> list = ["a", "b", "c"] 5>>> empty.append(list.copy()) 6>>> print(empty) 7[['a', 'b', 'c']] 8>>> list[0], list[1] = list[1], list[0] 9>>> print(list) 10['b', 'a', 'c'] 11>>> empty.append(list) 12>>> print(empty) 13[['a', 'b', 'c'], ['b', 'a', 'c']]

投稿2021/01/21 03:56

ppaul

総合スコア24670

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

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

0

最初に、「list」という名前は、Pythonの組み込み関数に使われているので変数名に使わないことをお勧めします。以下では、「list1」という名前を使います。

あなたのコードでは、最初にappendしたリストと、要素の順番を入れ替えてからappendしたリストは、実は同じオブジェクトです。そのため、最初にappendしたリストの内容も要素の順番が入れ替わります。

そうならないようにするには、順番を入れ替えるリストのオブジェクトを新たに作ればいいですね。list1.copy()で同じ要素を持つ別のリストを作成できます(リスト中に別のリストを含む場合はdeepcopy()を使いますが説明は省略)。

Python

1outer_list = [] 2print(outer_list) 3 4list1 = ['a', 'b', 'c'] 5outer_list.append(list1) 6print(outer_list) 7 8list2 = list1.copy() 9print(list1 is list2) 10list2[0], list2[1] = list2[1], list2[0] 11print(list2) 12 13outer_list.append(list2) 14print(outer_list)

result

1[] 2[['a', 'b', 'c']] 3False 4['b', 'a', 'c'] 5[['a', 'b', 'c'], ['b', 'a', 'c']]

投稿2021/01/21 03:52

Daregada

総合スコア11990

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

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

0

ベストアンサー

emptyに入れたlistを変更すると、emptyに入っている内容も変更されます。参考
なので、コピーするなどして別のリストを作ってあげないといけません。

python3

1import copy 2 3empty = [] 4l1 = ["a", "b", "c"] 5l2 = copy.copy(l1) 6l2[0], l2[1] = l2[1], l2[0] 7empty.append(l1) 8empty.append(l2) 9print(empty) 10# [['a', 'b', 'c'], ['b', 'a', 'c']]

※listという名前はpython内ですでに使われている型名なので、変数名にはしないほうが良いです。

投稿2021/01/21 03:52

jeanbiego

総合スコア3966

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

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

1236

2021/01/21 06:33

copyは知らなかったので勉強になりました。 BAは一番回答が早かった方にさせていただきます。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問