リストの追加と削除

このレッスンで作るもの — リストに値を足す append、取り除く remove、件数を数える len を正式に覚えます。

リストの追加と削除

第 5 章のループでは、すでにリストを何度も使ってきました。for record in records と書いて中身を 1 件ずつ取り出す、あの records がリストです。ただ、リストそのものを増やしたり減らしたりする方法は、まだきちんと扱っていません。ここで正面から覚えます。

おこづかい帳は「支出が 1 件増えた」「打ち間違えたから 1 件消したい」「今何件あるか知りたい」の 3 つができて、はじめて道具になります。それぞれに対応するのが appendremovelen です。

リストは順番を保ったまま、いくつでも値を並べておける入れ物です。あとから中身を増減できるのが、この章でいちばん大事な性質です。

append で末尾に追加する

append はリストの いちばんうしろ に値を 1 つ足します。書き方は リスト.append(値) です。ドットでつないで呼び出すこの形を メソッド と呼びます。

items = ["りんご", "みかん"] items.append("ノート") print(items)

表示は ['りんご', 'みかん', 'ノート'] です。第 5 章や第 6 章で合計を数えるときに使った append は、これと同じものでした。

ここで見落としやすいのは、append元のリストそのものを書き換える という点です。新しいリストを作って返すのではありません。

items = ["りんご"] new_items = items.append("みかん") print(new_items)

new_items には None が入ります。append の戻り値は None だからです。追加した結果を使いたいときは、append を呼んだあとの items を見ます。

remove で値を取り除く

remove は指定した値と 最初に一致した 1 件 をリストから消します。位置ではなく値で指定するのが特徴です。

items = ["りんご", "みかん", "ノート"] items.remove("みかん") print(items)

表示は ['りんご', 'ノート'] になります。同じ値が 2 つ入っている場合、消えるのは前にある 1 つだけで、全部は消えません。

len で件数を数える

len はメソッドではなく組み込みの関数で、len(リスト) と書きます。中身がいくつあるかを int で返します。

items = ["りんご", "みかん"] print(len(items))

2 と表示されます。空のリスト [] なら len([])0 です。件数の表示にも、条件分岐にも使えます。

diagram (will load when visible)

動きを追ってみる

["りんご", "みかん"]"ノート" を足し、"りんご" を消す流れを追います。

  1. 最初のリストは ["りんご", "みかん"]len2
  2. items.append("ノート")["りんご", "みかん", "ノート"] になり len3
  3. items.remove("りんご")["みかん", "ノート"] になり len2

追加は末尾に入り、削除しても残りの順番は変わりません。リストは順番を守り続けます。

「消えたのに順番が崩れない」のはリストの大事な性質です。あとで学ぶ set は順番を持たないので、ここが決定的な違いになります。

よくある間違い

  1. 無い値を remove する["りんご"].remove("みかん")ValueError になり、プログラムがそこで止まります。メッセージは list.remove(x): x not in list です。消す前に if "みかん" in items で存在を確かめるのが基本の対策です。
  2. append の戻り値を受け取るitems = items.append("ノート") と書くと itemsNone になり、次の行で TypeError が出ます。append は呼ぶだけにします。
  3. append に複数渡すitems.append("りんご", "みかん") はエラーです。append が受け取れるのは 1 つだけで、2 件足したいなら 2 回呼びます。

ValueError は「値がおかしい」という意味の例外です。第 8 章で try を使って受け止める方法を学びますが、今の段階では in で事前に確認するほうが読みやすく書けます。

やってみよう

関数 manage_list(items, add_item, remove_item) を実装してください。リスト itemsadd_itemappend で追加し、そのあと remove_item がリストに含まれていれば remove で 1 件取り除いて、最後のリストを return します。

remove_item がリストに無いときは何も消さず、追加だけした状態を返します。remove をいきなり呼ぶと ValueError で落ちるので、in で確認してから呼んでください。追加してから削除する、という順番も守ります。

要件

  1. 関数名は manage_list で、引数は items と add_item と remove_item の3つ
  2. 先に add_item を append でリストの末尾に追加する
  3. remove_item がリストに含まれているときだけ remove で1件削除する
  4. 最後のリストを return する

入出力例

manage_list(["りんご","みかん"], "ノート", "りんご")["みかん","ノート"] manage_list(["りんご"], "ノート", "バナナ")["りんご","ノート"] manage_list([], "ノート", "ノート")[] manage_list(["りんご","りんご"], "みかん", "りんご")["りんご","みかん"] manage_list(["電車代","牛乳"], "ペン", "ペン")["電車代","牛乳"]

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
main.py
学習モード

メモ

リストの追加と削除

⌘S で保存