リストの要素を追加・削除する
目次
このレッスンで学ぶこと
- 要素を追加する方法(append, insert, extend)
- 要素を削除する方法(remove, pop, clear)
- リストを変更する各種メソッド
- 追加・削除の使い分け
リストの追加・削除とは
追加・削除は、リストの内容を動的に変更する操作です。プログラム実行中にデータを加えたり除いたりして、リストの内容を管理します。
| メソッド | 説明 | 戻り値 |
|---|---|---|
append(要素) | 末尾に1つ追加 | None |
insert(位置, 要素) | 指定位置に挿入 | None |
extend(リスト) | 複数要素を追加 | None |
remove(値) | 値を削除 | None |
pop(位置) | インデックスで削除 | 削除した値 |
clear() | 全削除 | None |
主な特徴:
- リストは可変(ミュータブル)なので、作成後に変更可能
- 追加・削除は元のリストを直接変更する(破壊的操作)
- append()とextend()の違いに注意(リストをそのまま追加 vs 展開して追加)
- pop()だけが削除した値を返す
簡単なコード例:
Pythontasks = ["メール確認", "資料作成"] # 追加 tasks.append("会議準備") print(tasks) # 削除 tasks.remove("メール確認") print(tasks) # 複数追加 tasks.extend(["報告書作成", "承認"]) print(tasks)
実行結果:
['メール確認', '資料作成', '会議準備']
['資料作成', '会議準備']
['資料作成', '会議準備', '報告書作成', '承認']
なぜ追加・削除が必要なのか?
プログラムの実行中にデータが変化するとき、リストに要素を追加したり削除したりする必要があります。
Python# タスク管理 tasks = ["メール確認", "資料作成"] print(f"初期タスク: {tasks}") # タスクを追加 tasks.append("会議準備") print(f"追加後: {tasks}") # タスクを完了(削除) tasks.remove("メール確認") print(f"完了後: {tasks}")
実行結果:
初期タスク: ['メール確認', '資料作成']
追加後: ['メール確認', '資料作成', '会議準備']
完了後: ['資料作成', '会議準備']
💡 豆知識: Pythonのリストは動的配列として実装されており、要素の追加・削除が効率的に行えるように設計されています。
要素の追加
append() - 末尾に追加
機能: リストの末尾に1つの要素を追加します。
書き方:
Pythonリスト.append(要素)
用途: データの順次追加、ログの記録、結果の蓄積
注意点:
- 元のリストが変更される(破壊的操作)
- 戻り値はNone
- リストを追加すると入れ子になる
Pythonfruits = ["りんご", "バナナ"] print(f"初期: {fruits}") fruits.append("オレンジ") print(f"追加後: {fruits}") fruits.append("ぶどう") print(f"さらに追加: {fruits}")
実行結果:
初期: ['りんご', 'バナナ']
追加後: ['りんご', 'バナナ', 'オレンジ']
さらに追加: ['りんご', 'バナナ', 'オレンジ', 'ぶどう']
insert() - 指定位置に挿入
機能: 指定したインデックスの位置に要素を挿入します。
書き方:
Pythonリスト.insert(インデックス, 要素)
用途: 特定位置への挿入、優先度付きリスト、ソート済みリストへの挿入
注意点:
- 既存の要素は後ろにずれる
- インデックスが範囲外でもエラーにならない
- 負のインデックスも使える
Pythonnumbers = [1, 2, 4, 5] print(f"初期: {numbers}") # インデックス2に3を挿入 numbers.insert(2, 3) print(f"挿入後: {numbers}") # 先頭に挿入 numbers.insert(0, 0) print(f"先頭に挿入: {numbers}")
実行結果:
初期: [1, 2, 4, 5]
挿入後: [1, 2, 3, 4, 5]
先頭に挿入: [0, 1, 2, 3, 4, 5]
extend() - 複数要素を追加
機能: 別のリストの全要素を末尾に追加します。
書き方:
Pythonリスト.extend(別のリスト)
用途: リストの結合、複数データの一括追加
注意点:
- appendと違い、要素が展開される
- +演算子との違いに注意
- 文字列を渡すと1文字ずつ追加される
Pythonlist1 = [1, 2, 3] list2 = [4, 5, 6] print(f"list1: {list1}") print(f"list2: {list2}") list1.extend(list2) print(f"extend後: {list1}") # appendとの違い list3 = [1, 2, 3] list3.append([4, 5, 6]) print(f"append使用: {list3}")
実行結果:
list1: [1, 2, 3]
list2: [4, 5, 6]
extend後: [1, 2, 3, 4, 5, 6]
append使用: [1, 2, 3, [4, 5, 6]]
要素の削除
remove() - 値で削除
機能: 指定した値の最初の出現を削除します。
書き方:
Pythonリスト.remove(値)
用途: 特定値の削除、不要データの除去
注意点:
- 値が存在しないとValueError
- 最初の1つだけ削除される
- 複数ある場合は最初のもののみ
Pythonfruits = ["りんご", "バナナ", "オレンジ", "バナナ"] print(f"初期: {fruits}") fruits.remove("バナナ") print(f"削除後: {fruits}") # 存在しない値を削除しようとするとエラー try: fruits.remove("メロン") except ValueError as e: print(f"エラー: {e}")
実行結果:
初期: ['りんご', 'バナナ', 'オレンジ', 'バナナ']
削除後: ['りんご', 'オレンジ', 'バナナ']
エラー: list.remove(x): x not in list
pop() - インデックスで削除
機能: 指定したインデックスの要素を削除し、その値を返します。
書き方:
Python値 = リスト.pop() # 末尾を削除 値 = リスト.pop(インデックス)
用途: スタック操作、最後の要素の取得と削除、履歴管理
注意点:
- 削除した値が返される
- インデックス省略時は末尾
- 空のリストではIndexError
Pythonnumbers = [1, 2, 3, 4, 5] print(f"初期: {numbers}") # 末尾を削除 last = numbers.pop() print(f"削除した値: {last}") print(f"削除後: {numbers}") # インデックス1を削除 value = numbers.pop(1) print(f"削除した値: {value}") print(f"削除後: {numbers}")
実行結果:
初期: [1, 2, 3, 4, 5]
削除した値: 5
削除後: [1, 2, 3, 4]
削除した値: 2
削除後: [1, 3, 4]
clear() - 全削除
機能: リストの全要素を削除します。
書き方:
Pythonリスト.clear()
用途: リストの初期化、データのクリア
注意点:
- 空リストになる
リスト = []とは異なる(同じオブジェクトを保持)
Pythonnumbers = [1, 2, 3, 4, 5] print(f"初期: {numbers}") numbers.clear() print(f"クリア後: {numbers}")
実行結果:
初期: [1, 2, 3, 4, 5]
クリア後: []
del文 - インデックス・スライスで削除
機能: インデックスやスライスで要素を削除します。
書き方:
Pythondel リスト[インデックス] del リスト[開始:終了]
用途: 範囲削除、変数の削除
注意点:
- 値は返されない
- スライスで複数削除可能
Pythonnumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(f"初期: {numbers}") # インデックス2を削除 del numbers[2] print(f"del [2]: {numbers}") # スライスで削除 del numbers[2:5] print(f"del [2:5]: {numbers}")
実行結果:
初期: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del [2]: [0, 1, 3, 4, 5, 6, 7, 8, 9]
del [2:5]: [0, 1, 6, 7, 8, 9]
具体例
例1: ショッピングカート
Pythoncart = [] # 商品を追加 cart.append("りんご") cart.append("バナナ") cart.append("牛乳") print(f"カート: {cart}") # 商品を削除 cart.remove("バナナ") print(f"バナナ削除後: {cart}") # さらに追加 cart.extend(["パン", "卵"]) print(f"追加後: {cart}")
実行結果:
カート: ['りんご', 'バナナ', '牛乳']
バナナ削除後: ['りんご', '牛乳']
追加後: ['りんご', '牛乳', 'パン', '卵']
例2: ToDoリスト
Pythontodos = ["メール確認", "資料作成", "会議準備"] print("=== ToDoリスト ===") for i, todo in enumerate(todos, 1): print(f"{i}. {todo}") # タスク完了(最初のタスクを削除) completed = todos.pop(0) print(f"\n完了: {completed}") # 新しいタスクを追加 todos.append("報告書作成") print("\n=== 更新後 ===") for i, todo in enumerate(todos, 1): print(f"{i}. {todo}")
実行結果:
=== ToDoリスト ===
1. メール確認
2. 資料作成
3. 会議準備
完了: メール確認
=== 更新後 ===
1. 資料作成
2. 会議準備
3. 報告書作成
例3: 履歴管理
Pythonhistory = [] max_history = 5 # 履歴を追加 actions = ["開く", "編集", "保存", "閉じる", "開く", "編集", "保存"] for action in actions: history.append(action) # 最大数を超えたら古いものを削除 if len(history) > max_history: history.pop(0) print(f"履歴: {history}")
実行結果:
履歴: ['開く']
履歴: ['開く', '編集']
履歴: ['開く', '編集', '保存']
履歴: ['開く', '編集', '保存', '閉じる']
履歴: ['開く', '編集', '保存', '閉じる', '開く']
履歴: ['編集', '保存', '閉じる', '開く', '編集']
履歴: ['保存', '閉じる', '開く', '編集', '保存']
例4: フィルタリング
Python# 0を除去 numbers = [1, 0, 2, 0, 3, 0, 4, 5] print(f"元のリスト: {numbers}") # 0をすべて削除 while 0 in numbers: numbers.remove(0) print(f"0削除後: {numbers}")
実行結果:
元のリスト: [1, 0, 2, 0, 3, 0, 4, 5]
0削除後: [1, 2, 3, 4, 5]
例5: スタック操作
Python# スタック(後入れ先出し) stack = [] # プッシュ(追加) stack.append(1) stack.append(2) stack.append(3) print(f"スタック: {stack}") # ポップ(取り出し) print(f"pop: {stack.pop()}") print(f"pop: {stack.pop()}") print(f"残り: {stack}")
実行結果:
スタック: [1, 2, 3]
pop: 3
pop: 2
残り: [1]
例6: キュー操作
Python# キュー(先入れ先出し) queue = [] # エンキュー(追加) queue.append("A") queue.append("B") queue.append("C") print(f"キュー: {queue}") # デキュー(取り出し) print(f"dequeue: {queue.pop(0)}") print(f"dequeue: {queue.pop(0)}") print(f"残り: {queue}")
実行結果:
キュー: ['A', 'B', 'C']
dequeue: A
dequeue: B
残り: ['C']
メソッドの使い分け
追加メソッドの比較
Python# append: 1つの要素を末尾に list1 = [1, 2, 3] list1.append(4) print(f"append: {list1}") # insert: 指定位置に挿入 list2 = [1, 2, 3] list2.insert(1, 1.5) print(f"insert: {list2}") # extend: 複数要素を末尾に list3 = [1, 2, 3] list3.extend([4, 5]) print(f"extend: {list3}") # + 演算子: 新しいリストを作成 list4 = [1, 2, 3] list5 = list4 + [4, 5] print(f"+演算子: {list5}") print(f"元のリスト: {list4}")
実行結果:
append: [1, 2, 3, 4]
insert: [1, 1.5, 2, 3]
extend: [1, 2, 3, 4, 5]
+演算子: [1, 2, 3, 4, 5]
元のリスト: [1, 2, 3]
削除メソッドの比較
Python# remove: 値で削除 list1 = [1, 2, 3, 2, 4] list1.remove(2) print(f"remove: {list1}") # pop: インデックスで削除(値を返す) list2 = [1, 2, 3, 4, 5] value = list2.pop(2) print(f"pop: {list2}, 削除した値: {value}") # del: インデックスで削除(値を返さない) list3 = [1, 2, 3, 4, 5] del list3[2] print(f"del: {list3}") # clear: 全削除 list4 = [1, 2, 3, 4, 5] list4.clear() print(f"clear: {list4}")
実行結果:
remove: [1, 3, 2, 4]
pop: [1, 2, 4, 5], 削除した値: 3
del: [1, 2, 4, 5]
clear: []
よくある間違い
間違い1: append()の戻り値
Python# 間違い: append()はNoneを返す numbers = [1, 2, 3] result = numbers.append(4) print(f"戻り値: {result}") print(f"リスト: {numbers}") # 正しい numbers = [1, 2, 3] numbers.append(4) print(f"リスト: {numbers}")
実行結果:
戻り値: None
リスト: [1, 2, 3, 4]
リスト: [1, 2, 3, 4]
間違い2: appendとextendの混同
Python# appendはそのまま追加 list1 = [1, 2, 3] list1.append([4, 5]) print(f"append: {list1}") # extendは展開して追加 list2 = [1, 2, 3] list2.extend([4, 5]) print(f"extend: {list2}")
実行結果:
append: [1, 2, 3, [4, 5]]
extend: [1, 2, 3, 4, 5]
間違い3: ループ中の削除
Python# 危険: ループ中の削除 numbers = [1, 2, 3, 4, 5] for num in numbers: if num % 2 == 0: numbers.remove(num) # 予期しない動作 print(f"結果: {numbers}") # 正しい: 新しいリストを作る numbers = [1, 2, 3, 4, 5] numbers = [num for num in numbers if num % 2 != 0] print(f"正しい結果: {numbers}")
実行結果:
結果: [1, 3, 4, 5]
正しい結果: [1, 3, 5]
間違い4: remove()で全削除
Python# 間違い: 最初の1つだけ削除される numbers = [1, 2, 2, 3, 2, 4] numbers.remove(2) print(f"remove 1回: {numbers}") # 全削除するにはループ numbers = [1, 2, 2, 3, 2, 4] while 2 in numbers: numbers.remove(2) print(f"全削除: {numbers}")
実行結果:
remove 1回: [1, 2, 3, 2, 4]
全削除: [1, 3, 4]
間違い5: pop()の範囲外
Python# 空リストでpop() empty = [] try: empty.pop() except IndexError: print("空リストではpop()できません") # 範囲外のインデックス numbers = [1, 2, 3] try: numbers.pop(10) except IndexError: print("インデックス範囲外")
実行結果:
空リストではpop()できません
インデックス範囲外
練習問題
問題1(基礎)⭐☆☆
空のリストを作り、1, 2, 3を順番に追加してください。
💡 ヒント
append()を使います。
✅ 解答例
Pythonnumbers = [] numbers.append(1) numbers.append(2) numbers.append(3) print(numbers)
実行結果:
[1, 2, 3]
問題2(基礎)⭐☆☆
リスト ["A", "B", "C", "D"] から"B"を削除してください。
💡 ヒント
remove()を使います。
✅ 解答例
Pythonitems = ["A", "B", "C", "D"] items.remove("B") print(items)
実行結果:
['A', 'C', 'D']
問題3(応用)⭐⭐☆
リスト [1, 2, 3] とリスト [4, 5, 6] を結合してください。
💡 ヒント
extend()または+演算子を使います。
✅ 解答例
Pythonlist1 = [1, 2, 3] list2 = [4, 5, 6] # 方法1: extend list1.extend(list2) print(list1) # 方法2: +演算子 list3 = [1, 2, 3] list4 = [4, 5, 6] result = list3 + list4 print(result)
実行結果:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
まとめ
このレッスンでは、リストへの要素追加と削除の基本操作を学びました。
append,insert,extendで用途に応じた追加ができます。remove,pop,delで削除方法を目的別に使い分けられます。- 操作対象が存在しない場合のエラーと対処方法を理解しました。
- 要素位置と値指定の違いを意識して実装できるようになりました。
- 更新前後のリストを確認しながら処理することが重要です。
リストの要素を追加・削除する
目次
このレッスンで学ぶこと
- 要素を追加する方法(append, insert, extend)
- 要素を削除する方法(remove, pop, clear)
- リストを変更する各種メソッド
- 追加・削除の使い分け
リストの追加・削除とは
追加・削除は、リストの内容を動的に変更する操作です。プログラム実行中にデータを加えたり除いたりして、リストの内容を管理します。
| メソッド | 説明 | 戻り値 |
|---|---|---|
append(要素) | 末尾に1つ追加 | None |
insert(位置, 要素) | 指定位置に挿入 | None |
extend(リスト) | 複数要素を追加 | None |
remove(値) | 値を削除 | None |
pop(位置) | インデックスで削除 | 削除した値 |
clear() | 全削除 | None |
主な特徴:
- リストは可変(ミュータブル)なので、作成後に変更可能
- 追加・削除は元のリストを直接変更する(破壊的操作)
- append()とextend()の違いに注意(リストをそのまま追加 vs 展開して追加)
- pop()だけが削除した値を返す
簡単なコード例:
Pythontasks = ["メール確認", "資料作成"] # 追加 tasks.append("会議準備") print(tasks) # 削除 tasks.remove("メール確認") print(tasks) # 複数追加 tasks.extend(["報告書作成", "承認"]) print(tasks)
実行結果:
['メール確認', '資料作成', '会議準備']
['資料作成', '会議準備']
['資料作成', '会議準備', '報告書作成', '承認']
なぜ追加・削除が必要なのか?
プログラムの実行中にデータが変化するとき、リストに要素を追加したり削除したりする必要があります。
Python# タスク管理 tasks = ["メール確認", "資料作成"] print(f"初期タスク: {tasks}") # タスクを追加 tasks.append("会議準備") print(f"追加後: {tasks}") # タスクを完了(削除) tasks.remove("メール確認") print(f"完了後: {tasks}")
実行結果:
初期タスク: ['メール確認', '資料作成']
追加後: ['メール確認', '資料作成', '会議準備']
完了後: ['資料作成', '会議準備']
💡 豆知識: Pythonのリストは動的配列として実装されており、要素の追加・削除が効率的に行えるように設計されています。
要素の追加
append() - 末尾に追加
機能: リストの末尾に1つの要素を追加します。
書き方:
Pythonリスト.append(要素)
用途: データの順次追加、ログの記録、結果の蓄積
注意点:
- 元のリストが変更される(破壊的操作)
- 戻り値はNone
- リストを追加すると入れ子になる
Pythonfruits = ["りんご", "バナナ"] print(f"初期: {fruits}") fruits.append("オレンジ") print(f"追加後: {fruits}") fruits.append("ぶどう") print(f"さらに追加: {fruits}")
実行結果:
初期: ['りんご', 'バナナ']
追加後: ['りんご', 'バナナ', 'オレンジ']
さらに追加: ['りんご', 'バナナ', 'オレンジ', 'ぶどう']
insert() - 指定位置に挿入
機能: 指定したインデックスの位置に要素を挿入します。
書き方:
Pythonリスト.insert(インデックス, 要素)
用途: 特定位置への挿入、優先度付きリスト、ソート済みリストへの挿入
注意点:
- 既存の要素は後ろにずれる
- インデックスが範囲外でもエラーにならない
- 負のインデックスも使える
Pythonnumbers = [1, 2, 4, 5] print(f"初期: {numbers}") # インデックス2に3を挿入 numbers.insert(2, 3) print(f"挿入後: {numbers}") # 先頭に挿入 numbers.insert(0, 0) print(f"先頭に挿入: {numbers}")
実行結果:
初期: [1, 2, 4, 5]
挿入後: [1, 2, 3, 4, 5]
先頭に挿入: [0, 1, 2, 3, 4, 5]
extend() - 複数要素を追加
機能: 別のリストの全要素を末尾に追加します。
書き方:
Pythonリスト.extend(別のリスト)
用途: リストの結合、複数データの一括追加
注意点:
- appendと違い、要素が展開される
- +演算子との違いに注意
- 文字列を渡すと1文字ずつ追加される
Pythonlist1 = [1, 2, 3] list2 = [4, 5, 6] print(f"list1: {list1}") print(f"list2: {list2}") list1.extend(list2) print(f"extend後: {list1}") # appendとの違い list3 = [1, 2, 3] list3.append([4, 5, 6]) print(f"append使用: {list3}")
実行結果:
list1: [1, 2, 3]
list2: [4, 5, 6]
extend後: [1, 2, 3, 4, 5, 6]
append使用: [1, 2, 3, [4, 5, 6]]
要素の削除
remove() - 値で削除
機能: 指定した値の最初の出現を削除します。
書き方:
Pythonリスト.remove(値)
用途: 特定値の削除、不要データの除去
注意点:
- 値が存在しないとValueError
- 最初の1つだけ削除される
- 複数ある場合は最初のもののみ
Pythonfruits = ["りんご", "バナナ", "オレンジ", "バナナ"] print(f"初期: {fruits}") fruits.remove("バナナ") print(f"削除後: {fruits}") # 存在しない値を削除しようとするとエラー try: fruits.remove("メロン") except ValueError as e: print(f"エラー: {e}")
実行結果:
初期: ['りんご', 'バナナ', 'オレンジ', 'バナナ']
削除後: ['りんご', 'オレンジ', 'バナナ']
エラー: list.remove(x): x not in list
pop() - インデックスで削除
機能: 指定したインデックスの要素を削除し、その値を返します。
書き方:
Python値 = リスト.pop() # 末尾を削除 値 = リスト.pop(インデックス)
用途: スタック操作、最後の要素の取得と削除、履歴管理
注意点:
- 削除した値が返される
- インデックス省略時は末尾
- 空のリストではIndexError
Pythonnumbers = [1, 2, 3, 4, 5] print(f"初期: {numbers}") # 末尾を削除 last = numbers.pop() print(f"削除した値: {last}") print(f"削除後: {numbers}") # インデックス1を削除 value = numbers.pop(1) print(f"削除した値: {value}") print(f"削除後: {numbers}")
実行結果:
初期: [1, 2, 3, 4, 5]
削除した値: 5
削除後: [1, 2, 3, 4]
削除した値: 2
削除後: [1, 3, 4]
clear() - 全削除
機能: リストの全要素を削除します。
書き方:
Pythonリスト.clear()
用途: リストの初期化、データのクリア
注意点:
- 空リストになる
リスト = []とは異なる(同じオブジェクトを保持)
Pythonnumbers = [1, 2, 3, 4, 5] print(f"初期: {numbers}") numbers.clear() print(f"クリア後: {numbers}")
実行結果:
初期: [1, 2, 3, 4, 5]
クリア後: []
del文 - インデックス・スライスで削除
機能: インデックスやスライスで要素を削除します。
書き方:
Pythondel リスト[インデックス] del リスト[開始:終了]
用途: 範囲削除、変数の削除
注意点:
- 値は返されない
- スライスで複数削除可能
Pythonnumbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(f"初期: {numbers}") # インデックス2を削除 del numbers[2] print(f"del [2]: {numbers}") # スライスで削除 del numbers[2:5] print(f"del [2:5]: {numbers}")
実行結果:
初期: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del [2]: [0, 1, 3, 4, 5, 6, 7, 8, 9]
del [2:5]: [0, 1, 6, 7, 8, 9]
具体例
例1: ショッピングカート
Pythoncart = [] # 商品を追加 cart.append("りんご") cart.append("バナナ") cart.append("牛乳") print(f"カート: {cart}") # 商品を削除 cart.remove("バナナ") print(f"バナナ削除後: {cart}") # さらに追加 cart.extend(["パン", "卵"]) print(f"追加後: {cart}")
実行結果:
カート: ['りんご', 'バナナ', '牛乳']
バナナ削除後: ['りんご', '牛乳']
追加後: ['りんご', '牛乳', 'パン', '卵']
例2: ToDoリスト
Pythontodos = ["メール確認", "資料作成", "会議準備"] print("=== ToDoリスト ===") for i, todo in enumerate(todos, 1): print(f"{i}. {todo}") # タスク完了(最初のタスクを削除) completed = todos.pop(0) print(f"\n完了: {completed}") # 新しいタスクを追加 todos.append("報告書作成") print("\n=== 更新後 ===") for i, todo in enumerate(todos, 1): print(f"{i}. {todo}")
実行結果:
=== ToDoリスト ===
1. メール確認
2. 資料作成
3. 会議準備
完了: メール確認
=== 更新後 ===
1. 資料作成
2. 会議準備
3. 報告書作成
例3: 履歴管理
Pythonhistory = [] max_history = 5 # 履歴を追加 actions = ["開く", "編集", "保存", "閉じる", "開く", "編集", "保存"] for action in actions: history.append(action) # 最大数を超えたら古いものを削除 if len(history) > max_history: history.pop(0) print(f"履歴: {history}")
実行結果:
履歴: ['開く']
履歴: ['開く', '編集']
履歴: ['開く', '編集', '保存']
履歴: ['開く', '編集', '保存', '閉じる']
履歴: ['開く', '編集', '保存', '閉じる', '開く']
履歴: ['編集', '保存', '閉じる', '開く', '編集']
履歴: ['保存', '閉じる', '開く', '編集', '保存']
例4: フィルタリング
Python# 0を除去 numbers = [1, 0, 2, 0, 3, 0, 4, 5] print(f"元のリスト: {numbers}") # 0をすべて削除 while 0 in numbers: numbers.remove(0) print(f"0削除後: {numbers}")
実行結果:
元のリスト: [1, 0, 2, 0, 3, 0, 4, 5]
0削除後: [1, 2, 3, 4, 5]
例5: スタック操作
Python# スタック(後入れ先出し) stack = [] # プッシュ(追加) stack.append(1) stack.append(2) stack.append(3) print(f"スタック: {stack}") # ポップ(取り出し) print(f"pop: {stack.pop()}") print(f"pop: {stack.pop()}") print(f"残り: {stack}")
実行結果:
スタック: [1, 2, 3]
pop: 3
pop: 2
残り: [1]
例6: キュー操作
Python# キュー(先入れ先出し) queue = [] # エンキュー(追加) queue.append("A") queue.append("B") queue.append("C") print(f"キュー: {queue}") # デキュー(取り出し) print(f"dequeue: {queue.pop(0)}") print(f"dequeue: {queue.pop(0)}") print(f"残り: {queue}")
実行結果:
キュー: ['A', 'B', 'C']
dequeue: A
dequeue: B
残り: ['C']
メソッドの使い分け
追加メソッドの比較
Python# append: 1つの要素を末尾に list1 = [1, 2, 3] list1.append(4) print(f"append: {list1}") # insert: 指定位置に挿入 list2 = [1, 2, 3] list2.insert(1, 1.5) print(f"insert: {list2}") # extend: 複数要素を末尾に list3 = [1, 2, 3] list3.extend([4, 5]) print(f"extend: {list3}") # + 演算子: 新しいリストを作成 list4 = [1, 2, 3] list5 = list4 + [4, 5] print(f"+演算子: {list5}") print(f"元のリスト: {list4}")
実行結果:
append: [1, 2, 3, 4]
insert: [1, 1.5, 2, 3]
extend: [1, 2, 3, 4, 5]
+演算子: [1, 2, 3, 4, 5]
元のリスト: [1, 2, 3]
削除メソッドの比較
Python# remove: 値で削除 list1 = [1, 2, 3, 2, 4] list1.remove(2) print(f"remove: {list1}") # pop: インデックスで削除(値を返す) list2 = [1, 2, 3, 4, 5] value = list2.pop(2) print(f"pop: {list2}, 削除した値: {value}") # del: インデックスで削除(値を返さない) list3 = [1, 2, 3, 4, 5] del list3[2] print(f"del: {list3}") # clear: 全削除 list4 = [1, 2, 3, 4, 5] list4.clear() print(f"clear: {list4}")
実行結果:
remove: [1, 3, 2, 4]
pop: [1, 2, 4, 5], 削除した値: 3
del: [1, 2, 4, 5]
clear: []
よくある間違い
間違い1: append()の戻り値
Python# 間違い: append()はNoneを返す numbers = [1, 2, 3] result = numbers.append(4) print(f"戻り値: {result}") print(f"リスト: {numbers}") # 正しい numbers = [1, 2, 3] numbers.append(4) print(f"リスト: {numbers}")
実行結果:
戻り値: None
リスト: [1, 2, 3, 4]
リスト: [1, 2, 3, 4]
間違い2: appendとextendの混同
Python# appendはそのまま追加 list1 = [1, 2, 3] list1.append([4, 5]) print(f"append: {list1}") # extendは展開して追加 list2 = [1, 2, 3] list2.extend([4, 5]) print(f"extend: {list2}")
実行結果:
append: [1, 2, 3, [4, 5]]
extend: [1, 2, 3, 4, 5]
間違い3: ループ中の削除
Python# 危険: ループ中の削除 numbers = [1, 2, 3, 4, 5] for num in numbers: if num % 2 == 0: numbers.remove(num) # 予期しない動作 print(f"結果: {numbers}") # 正しい: 新しいリストを作る numbers = [1, 2, 3, 4, 5] numbers = [num for num in numbers if num % 2 != 0] print(f"正しい結果: {numbers}")
実行結果:
結果: [1, 3, 4, 5]
正しい結果: [1, 3, 5]
間違い4: remove()で全削除
Python# 間違い: 最初の1つだけ削除される numbers = [1, 2, 2, 3, 2, 4] numbers.remove(2) print(f"remove 1回: {numbers}") # 全削除するにはループ numbers = [1, 2, 2, 3, 2, 4] while 2 in numbers: numbers.remove(2) print(f"全削除: {numbers}")
実行結果:
remove 1回: [1, 2, 3, 2, 4]
全削除: [1, 3, 4]
間違い5: pop()の範囲外
Python# 空リストでpop() empty = [] try: empty.pop() except IndexError: print("空リストではpop()できません") # 範囲外のインデックス numbers = [1, 2, 3] try: numbers.pop(10) except IndexError: print("インデックス範囲外")
実行結果:
空リストではpop()できません
インデックス範囲外
練習問題
問題1(基礎)⭐☆☆
空のリストを作り、1, 2, 3を順番に追加してください。
💡 ヒント
append()を使います。
✅ 解答例
Pythonnumbers = [] numbers.append(1) numbers.append(2) numbers.append(3) print(numbers)
実行結果:
[1, 2, 3]
問題2(基礎)⭐☆☆
リスト ["A", "B", "C", "D"] から"B"を削除してください。
💡 ヒント
remove()を使います。
✅ 解答例
Pythonitems = ["A", "B", "C", "D"] items.remove("B") print(items)
実行結果:
['A', 'C', 'D']
問題3(応用)⭐⭐☆
リスト [1, 2, 3] とリスト [4, 5, 6] を結合してください。
💡 ヒント
extend()または+演算子を使います。
✅ 解答例
Pythonlist1 = [1, 2, 3] list2 = [4, 5, 6] # 方法1: extend list1.extend(list2) print(list1) # 方法2: +演算子 list3 = [1, 2, 3] list4 = [4, 5, 6] result = list3 + list4 print(result)
実行結果:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
まとめ
このレッスンでは、リストへの要素追加と削除の基本操作を学びました。
append,insert,extendで用途に応じた追加ができます。remove,pop,delで削除方法を目的別に使い分けられます。- 操作対象が存在しない場合のエラーと対処方法を理解しました。
- 要素位置と値指定の違いを意識して実装できるようになりました。
- 更新前後のリストを確認しながら処理することが重要です。