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と書くと、どちらかを操作しただけで、両方に影響が出る