気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア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
総合スコア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
総合スコア3966
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。