Listの性質を理解する
最終更新日:2021/6/21
【説明すること】
- Listに要素を追加する方法と注意点
li1+li2
,extend()
,append()
リストに要素を追加する方法は a+b
, extend()
, append()
があります。
a+bとextend()は同じ結果に見えますが、全く異なるものです。
a+b
だと、aもbも上書きされません。
元のリストをそのまま残し、追加後の結果を新しいリストにしたい場合が多いでしょう。その場合、結果を入れるリスト(受け皿 li1)を用意して”+”を使います。
extend()
だと、元のliが上書きされます。それで良ければ、cを追加後のリストとして使えばいいです。
受け皿はいらない(new_c = c.extend(d)と書かない)。
extend()で受け皿を書くと、思わぬ結果になるので書きません。受け皿が必要なら、上の”a+b”か下の「空のリストを作ってextend()
」と書きます。
append()
だと、list in list(リストの中にリストが出来る)になります。
注意が必要なコード
意図と異なったケースを示します。
「li1をli3に代入(li3を新たなリストと考えている)。li1はそのまま残す(追加しない)。その後、li3だけに要素15を追加しよう」としました。
ところが、こう書くと、li1も上書きされます。つまり、li3=li1と書くと、どちらかを操作すると両方影響を受けます。意図した結果か、注意が必要です。
li3 = li1 + li2でもいいのか?
ここで、li3 = li1 + li2
と書いてもいいのか?という疑問が湧きます。結論は問題ありません。
“+”の場合、新たなリストとして認識されるので、上のようにはなりません。li3.extend(li4)
としても、li1とli2に、li4は追加されません。
実際に書いているコード
上記のような混乱や誤解を避ける為に、現場では、”+”ではなく、明示的に、以下のように空のリストを用意してextend()
と書く事があります。
- 追加後の新しいリストは
li3 = li1 + li2
と書く。
または、空のリストを作ってextend()
と書く。 extend()
は要素を追加し、元のリストが上書きされるappend()
はlist in listになり、元のリストが上書きされるli1 = li2
と書くと、どちらかを操作しただけで、両方に影響が出る