文系出身がPythonで混同したpop() とremove() の違い
はじめに
文系出身未経験から新卒で入社し、約2ヶ月が経過しました!
現在、研修で一通りPythonについての学習を終えました。
Pythonを勉強していると、さまざまなメソッドを目にしますが、目的が似ているように感じて混同し、理解に悩むことが何度もありました。
文系出身で、プログラミングの経験がなかった私は、pop()とremove()両方とも「リストから削除する」という意味だと思っていたので、違いが分かりませんでした。
しかし、実装してみると、この2つは使う目的が全く異なることに気づきました。
この記事では、私が実際に混同していたpop()とremove()の違いについて、未経験者・初学者向けに具体例と一緒にまとめます。
remove() |要素を消したいだけの時
remove()は、リストから指定した要素を削除するだけです。
一度削除した要素は戻り値として受け取れないため、削除した値をその場で再利用することはできません。
また、remove()は最初に見つかった要素のみを削除するため、複数の同じ値がある場合は1つずつしか削除されないという特徴があります。
remove() の特徴
- 戻り値がない(None が返される)
- 要素の値を指定して削除
- 削除後の値は使えない
- 削除した要素を戻り値として受け取れないため、削除した値をその場で再利用することはできない
- シンプルに削除したい時に使う
- 最初に見つかった要素のみを削除する(複数の同じ値がある場合は1つずつしか削除されない)
remove() の例
# 例1:リストから特定の名前を削除
names = ["Kazuya", "Takuya", "Hikaru"]
names.remove("Takuya")
print(names) # → ["Kazuya", "Hikaru"]
# 例2:リストから特定の数字を削除
numbers = [10, 20, 30, 40, 50]
numbers.remove(30)
print(numbers) # → [10, 20, 40, 50]
# 例3:削除後の値を使おうとするとエラー
scores = [85, 92, 78, 88]
result = scores.remove(92)
print(result) # → None
print(result + 10) # → エラー!(None は数値ではない)
# 例4:複数の同じ値がある場合、最初の1つだけ削除される
fruits = ["apple", "banana", "apple", "orange"]
fruits.remove("apple") # 最初の"apple"だけ削除
print(items) # → ["banana", "apple", "orange"]
pop() |リストから取り出して後で使いたい時
pop()は、リストから要素を取り出して変数に入れることができます。
取り出した値は後で別の処理に使えます。
ただし、pop()を使う際には注意が必要です。
空のリストに対してpop()を使用したり、リストの範囲外のインデックスを指定したりするとエラーが発生します。
そのため、pop()を使う前にリストが空でないか、指定するインデックスが有効な範囲内かを確認することが重要です。
pop() の特徴
- 戻り値がある(取り出した要素が返される)
- インデックス(位置)で指定して取り出す
- 取り出した値を後で使える
- 値を別の処理に使いたい時に使う
- 空のリストや範囲外のインデックスを指定するとエラーが発生する
pop() の例
# 例1:リストから最後の要素を取り出す
colors = ["red", "blue", "green", "yellow"]
last = colors.pop() # インデックス指定なし = 最後の要素
print(last) # → "yellow"
print(colors) # → ["red", "blue", "green"]
# 例2:特定の位置の要素を取り出す
temperatures = [20, 25, 30, 28, 22]
middle = temperatures.pop(2) # インデックス2(3番目)を取り出す
print(middle) # → 30
print(temperatures) # → [20, 25, 28, 22]
# 例3:取り出した値を別の処理に使う
prices = [100, 200, 300, 150]
highest_price = prices.pop(2) # インデックス2を取り出す
print("最高価格は" + str(highest_price) + "円です") # → "最高価格は300円です"
# 例4:空のリストで pop() を使うとエラー
empty_list = []
result = empty_list.pop() # → IndexError: pop from empty list
# 例5:範囲外のインデックスを指定するとエラー
numbers = [1, 2, 3]
result = numbers.pop(10) # インデックス10は存在しない
# → IndexError: pop index out of range
日常生活で例えると
本棚(list)から本(要素)を取り出す場面を想像するとわかりやすいです。
remove() の場合
本棚から本を「捨てる」
↓
どこにも残らない
↓
その本はもう読めない
pop() の場合
本棚から本を「取り出して机に置く」
↓
机に本が残っている
↓
後で読める
pop() vs remove() の違いを表で比較
| 項目 | remove() | pop() |
|---|---|---|
| 何をするか | 要素を削除する | 要素を取り出す |
| 戻り値 | なし(None) | 取り出した値 |
| 指定方法 | 要素の値で指定 | インデックス(位置)で指定 |
| 後で使える? | ❌ いいえ | ✅ はい |
| 複数の同じ値があるとき | 最初の一つだけ削除 | インデックス指定のため関係なし |
| エラーになるとき | 要素が存在しない | 空のリストまたは範囲外のインデックス |
| 使う場面 | 不要な要素を消したい | 要素の値を別の処理に使いたい |
使い分けのポイント
remove() を使うべき場面
# 場面1:リストから特定の要素を削除したい
blocked_users = ["user1", "user2", "user3"]
blocked_users.remove("user2") # user2をブロック解除
print(blocked_users) # → ["user1", "user3"]
# 場面2:リストから重複を削除したい
fruits = ["apple", "banana", "apple", "orange"]
fruits.remove("apple") # 最初の"apple"だけ削除
print(fruits) # → ["banana", "apple", "orange"]
# 場面3:単に不要な要素を消したい
to_do = ["買い物", "洗濯", "掃除", "料理"]
to_do.remove("洗濯") # 洗濯は終わったので削除
print(to_do) # → ["買い物", "掃除", "料理"]
pop() を使うべき場面
# 場面1:リストから要素を取り出して変数に保存
stack = [1, 2, 3, 4, 5]
last_item = stack.pop() # 最後の要素を取り出す
print(f"取り出した値: {last_item}") # → "取り出した値: 5"
print(stack) # → [1, 2, 3, 4]
# 場面2:取り出した値を別の処理に使う
names = ["Kazuya", "Takuya", "Hikaru"]
next_person = names.pop(0) # 最初の人を取り出す
print(f"{next_person}さんの番です") # → "Kazuyaさんの番です"
# 場面3:取り出した値を計算に使う
prices = [100, 200, 300]
last_price = prices.pop() # 最後の価格を取り出す
total = sum(prices) + last_price * 1.1 # 消費税を加算
print(total) # → 計算結果
実践的な使用例
例1:ショッピングカートから商品を削除
# remove() を使う場合:商品を削除するだけ
cart = ["りんご", "みかん", "バナナ", "ぶどう"]
cart.remove("みかん") # みかんを削除
print(cart) # → ["りんご", "バナナ", "ぶどう"]
# pop() を使う場合:削除した商品の情報を使う
cart = ["りんご", "みかん", "バナナ", "ぶどう"]
removed_item = cart.pop(1) # インデックス1を削除
print(f"{removed_item}を削除しました") # → "みかんを削除しました"
例2:スタック(後入れ先出し)の実装
# pop() が活躍する場面
browser_history = ["Google", "YouTube", "GitHub", "Stack Overflow"]
# 戻るボタンを押すと、最後に訪問したサイトに戻る
last_site = browser_history.pop()
print(f"前のページ: {last_site}") # → "前のページ: Stack Overflow"
print(browser_history) # → ["Google", "YouTube", "GitHub"]
例3:ユーザーのブロック機能
# remove() が活躍する場面
blocked_users = ["user_spam", "user_bot", "user_troll"]
# ユーザーをブロック解除
blocked_users.remove("user_bot")
print(blocked_users) # → ["user_spam", "user_troll"]
まとめ
pop()とremove()の使い分けは、以下のように考えるとわかりやすいです。
削除したい要素がある
↓
「削除後の値を使いたい?」
↓
YES → pop() を使う
NO → remove() を使う
最初はどちらも削除するだけだと思っていましたが、実際は上記のような違いがあります。日常生活など具体的な場面に当てはめて考えると、想像しやすく理解を深めることができました。
今後も、ひとつずつ理解を深めながら学習を進めていきたいです。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました。







