メインコンテンツへスキップ
Lesson5 / 8

リストのメソッド一覧

目次

1. このレッスンで学ぶこと

  • リストの便利なメソッド
  • sort(), reverse()の使い方
  • count(), index()の使い方
  • copy()メソッドとその重要性

2. リストのメソッドとは

メソッドは、リストに関連した処理を実行する関数です。リスト固有の操作を効率的に行うための便利な道具で、データの並び替えや検索、カウント、コピーなどができます。

メソッド説明破壊的戻り値
sort()ソート(昇順/降順)はいNone
reverse()逆順に並び替えはいNone
count(値)値の出現回数いいえ個数
index(値)最初の位置を取得いいえインデックス
copy()リストをコピーいいえ新しいリスト

主な特徴:

  • リストの並び替え、検索、カウント、コピーなど多彩な操作が可能
  • 破壊的メソッド(sort, reverse)は元のリストを変更する
  • 非破壊的メソッド(count, index, copy)は元のリストを保持する
  • sorted()関数との違いに注意(メソッドと組み込み関数)

簡単なコード例:

Python
numbers = [3, 1, 4, 1, 5, 9, 2]

# ソート
numbers_sorted = sorted(numbers)
print(f"ソート: {numbers_sorted}")

# カウント
count_1 = numbers.count(1)
print(f"1の個数: {count_1}")

# 位置取得
position = numbers.index(4)
print(f"4の位置: {position}")

# コピー
copy_list = numbers.copy()
print(f"コピー: {copy_list}")

実行結果:

ソート: [1, 1, 2, 3, 4, 5, 9]
1の個数: 2
4の位置: 2
コピー: [3, 1, 4, 1, 5, 9, 2]

3. なぜメソッドを知る必要があるのか?

リストには様々な便利なメソッドが用意されています。これらを知ることで、効率的にデータを操作できます。

Python
numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# ソート(並び替え)
numbers.sort()
print(f"ソート後: {numbers}")

# 逆順
numbers.reverse()
print(f"逆順: {numbers}")

# 特定値の個数
count = numbers.count(1)
print(f"1の個数: {count}")

実行結果:

ソート後: [1, 1, 2, 3, 4, 5, 6, 9]
逆順: [9, 6, 5, 4, 3, 2, 1, 1]
1の個数: 2

💡 豆知識: Pythonのリストメソッドは、他の言語と比べて非常に豊富で使いやすいです。これらのメソッドを使いこなすことで、少ないコードで多くのことができます。


4. ソート関連

sort() - リストをソート

機能: リスト自体を昇順または降順にソートします。

書き方:

Python
リスト.sort()              # 昇順
リスト.sort(reverse=True)  # 降順

用途: データの並び替え、ランキング作成、検索の効率化

注意点:

  • 元のリストが変更される(破壊的操作)
  • 戻り値はNone
  • 異なる型が混在するとエラー
Python
# 数値のソート
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
print(f"元のリスト: {numbers}")

numbers.sort()
print(f"昇順: {numbers}")

numbers.sort(reverse=True)
print(f"降順: {numbers}")

# 文字列のソート
fruits = ["オレンジ", "りんご", "バナナ", "ぶどう"]
fruits.sort()
print(f"文字列ソート: {fruits}")

実行結果:

元のリスト: [3, 1, 4, 1, 5, 9, 2, 6]
昇順: [1, 1, 2, 3, 4, 5, 6, 9]
降順: [9, 6, 5, 4, 3, 2, 1, 1]
文字列ソート: ['おれんじ', 'ばなな', 'ぶどう', 'りんご']

sorted() - 新しいリストを返す

機能: ソートされた新しいリストを返します(元のリストは変更しない)。

書き方:

Python
新しいリスト = sorted(リスト)
新しいリスト = sorted(リスト, reverse=True)

用途: 元のリストを保持したままソート、一時的なソート

注意点:

  • 元のリストは変更されない
  • 新しいリストが返される
  • sort()メソッドではなく組み込み関数
Python
original = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_list = sorted(original)

print(f"元のリスト: {original}")
print(f"ソート済み: {sorted_list}")

実行結果:

元のリスト: [3, 1, 4, 1, 5, 9, 2, 6]
ソート済み: [1, 1, 2, 3, 4, 5, 6, 9]

reverse() - リストを逆順にする

機能: リストの要素を逆順に並び替えます。

書き方:

Python
リスト.reverse()

用途: 順序の反転、最新順への変更

注意点:

  • 元のリストが変更される
  • ソートではなく単純な反転
  • 戻り値はNone
Python
numbers = [1, 2, 3, 4, 5]
print(f"元のリスト: {numbers}")

numbers.reverse()
print(f"逆順: {numbers}")

# スライスとの違い
numbers2 = [1, 2, 3, 4, 5]
reversed_slice = numbers2[::-1]
print(f"元のリスト: {numbers2}")
print(f"スライス: {reversed_slice}")

実行結果:

元のリスト: [1, 2, 3, 4, 5]
逆順: [5, 4, 3, 2, 1]
元のリスト: [1, 2, 3, 4, 5]
スライス: [5, 4, 3, 2, 1]

5. 検索関連

count() - 要素の出現回数

機能: 指定した値がリスト内に何回出現するか数えます。

書き方:

Python
回数 = リスト.count()

用途: 出現回数のカウント、重複チェック、頻度分析

注意点:

  • 存在しない値は0を返す
  • エラーにはならない
Python
numbers = [1, 2, 3, 2, 4, 2, 5, 2]

count_2 = numbers.count(2)
count_3 = numbers.count(3)
count_9 = numbers.count(9)

print(f"2の個数: {count_2}")
print(f"3の個数: {count_3}")
print(f"9の個数: {count_9}")

実行結果:

2の個数: 4
3の個数: 1
9の個数: 0

index() - 要素の位置を取得

機能: 指定した値が最初に出現するインデックスを返します。

書き方:

Python
インデックス = リスト.index()
インデックス = リスト.index(, 開始, 終了)

用途: 要素の位置検索、データの探索

注意点:

  • 値が存在しないとValueError
  • 最初の1つだけ返す
  • 開始・終了位置を指定可能
Python
fruits = ["りんご", "バナナ", "オレンジ", "バナナ", "ぶどう"]

# バナナの位置
index = fruits.index("バナナ")
print(f"バナナの位置: {index}")

# 2番目のバナナの位置(開始位置を指定)
index2 = fruits.index("バナナ", 2)
print(f"2番目のバナナ: {index2}")

# 存在しない値
try:
    fruits.index("メロン")
except ValueError:
    print("メロンは見つかりません")

実行結果:

バナナの位置: 1
2番目のバナナ: 3
メロンは見つかりません

6. コピー関連

copy() - リストのコピー

機能: リストのシャローコピー(浅いコピー)を作成します。

書き方:

Python
新しいリスト = リスト.copy()

用途: リストの複製、元データの保持

注意点:

  • シャローコピー(1階層のみコピー)
  • ネストしたリストは参照がコピーされる
Python
# 通常のコピー
original = [1, 2, 3, 4, 5]
copied = original.copy()

print(f"元のリスト: {original}")
print(f"コピー: {copied}")

# コピーを変更しても元は変わらない
copied[0] = 100
print(f"変更後の元: {original}")
print(f"変更後のコピー: {copied}")

実行結果:

元のリスト: [1, 2, 3, 4, 5]
コピー: [1, 2, 3, 4, 5]
変更後の元: [1, 2, 3, 4, 5]
変更後のコピー: [100, 2, 3, 4, 5]

参照とコピーの違い

Python
# 参照(同じオブジェクト)
list1 = [1, 2, 3]
list2 = list1  # 参照
list2[0] = 100
print(f"list1: {list1}")  # 変更される
print(f"list2: {list2}")

# コピー(別のオブジェクト)
list3 = [1, 2, 3]
list4 = list3.copy()  # コピー
list4[0] = 100
print(f"list3: {list3}")  # 変更されない
print(f"list4: {list4}")

実行結果:

list1: [100, 2, 3]
list2: [100, 2, 3]
list3: [1, 2, 3]
list4: [100, 2, 3]

7. 具体例

例1: 成績の並び替え

Python
scores = [85, 92, 78, 95, 88, 76, 90]

print("=== 成績一覧 ===")
print(f"元の順: {scores}")

# 昇順
sorted_asc = sorted(scores)
print(f"昇順: {sorted_asc}")

# 降順
sorted_desc = sorted(scores, reverse=True)
print(f"降順: {sorted_desc}")

# トップ3
top3 = sorted_desc[:3]
print(f"トップ3: {top3}")

実行結果:

=== 成績一覧 ===
元の順: [85, 92, 78, 95, 88, 76, 90]
昇順: [76, 78, 85, 88, 90, 92, 95]
降順: [95, 92, 90, 88, 85, 78, 76]
トップ3: [95, 92, 90]

例2: 投票結果の集計

Python
votes = ["A", "B", "A", "C", "B", "A", "B", "A", "C", "A"]

print("=== 投票結果 ===")
print(f"総投票数: {len(votes)}")

# 各候補の得票数
count_a = votes.count("A")
count_b = votes.count("B")
count_c = votes.count("C")

print(f"候補A: {count_a}票")
print(f"候補B: {count_b}票")
print(f"候補C: {count_c}票")

# 当選者
if count_a > count_b and count_a > count_c:
    print("当選: 候補A")
elif count_b > count_a and count_b > count_c:
    print("当選: 候補B")
else:
    print("当選: 候補C")

実行結果:

=== 投票結果 ===
総投票数: 10
候補A: 5票
候補B: 3票
候補C: 2票
当選: 候補A

例3: データの検索

Python
students = ["田中", "佐藤", "鈴木", "高橋", "伊藤"]
target = "鈴木"

if target in students:
    position = students.index(target)
    print(f"{target}さんは{position + 1}番目にいます")
else:
    print(f"{target}さんは見つかりません")

実行結果:

鈴木さんは3番目にいます

8. メソッド一覧まとめ

変更するメソッド(破壊的)

Python
numbers = [3, 1, 4, 1, 5]

# append(x): 末尾に追加
numbers.append(9)
print(f"append: {numbers}")

# insert(i, x): i番目に挿入
numbers.insert(0, 2)
print(f"insert: {numbers}")

# remove(x): 最初のxを削除
numbers.remove(1)
print(f"remove: {numbers}")

# pop(i): i番目を削除して返す
value = numbers.pop()
print(f"pop: {numbers}, 値: {value}")

# clear(): 全削除
numbers_copy = numbers.copy()
numbers_copy.clear()
print(f"clear: {numbers_copy}")

# sort(): ソート
numbers.sort()
print(f"sort: {numbers}")

# reverse(): 逆順
numbers.reverse()
print(f"reverse: {numbers}")

実行結果:

append: [3, 1, 4, 1, 5, 9]
insert: [2, 3, 1, 4, 1, 5, 9]
remove: [2, 3, 4, 1, 5, 9]
pop: [2, 3, 4, 1, 5], 値: 9
clear: []
sort: [1, 2, 3, 4, 5]
reverse: [5, 4, 3, 2, 1]

変更しないメソッド

Python
numbers = [1, 2, 3, 2, 4, 2, 5]

# count(x): xの個数
count = numbers.count(2)
print(f"count(2): {count}")

# index(x): xの位置
index = numbers.index(3)
print(f"index(3): {index}")

# copy(): コピー
copied = numbers.copy()
print(f"copy: {copied}")

print(f"元のリスト: {numbers}")

実行結果:

count(2): 3
index(3): 2
copy: [1, 2, 3, 2, 4, 2, 5]
元のリスト: [1, 2, 3, 2, 4, 2, 5]

9. 練習問題

問題1(基礎)⭐☆☆

リスト [3, 1, 4, 1, 5, 9] を昇順にソートしてください。

💡 ヒント

sort()メソッドを使います。

✅ 解答例
Python
numbers = [3, 1, 4, 1, 5, 9]
numbers.sort()
print(numbers)

実行結果:

[1, 1, 3, 4, 5, 9]

問題2(基礎)⭐☆☆

リスト [1, 2, 3, 2, 4, 2, 5] の中に2が何個あるか数えてください。

💡 ヒント

count()メソッドを使います。

✅ 解答例
Python
numbers = [1, 2, 3, 2, 4, 2, 5]
count = numbers.count(2)
print(f"2の個数: {count}")

実行結果:

2の個数: 3

問題3(応用)⭐⭐☆

リスト [5, 2, 8, 1, 9] の最大値と最小値を求めてください。

💡 ヒント

sort()またはmax(), min()を使います。

✅ 解答例
Python
numbers = [5, 2, 8, 1, 9]

# 方法1: sort()を使う
sorted_numbers = sorted(numbers)
print(f"最小値: {sorted_numbers[0]}")
print(f"最大値: {sorted_numbers[-1]}")

# 方法2: max(), min()を使う
print(f"最小値: {min(numbers)}")
print(f"最大値: {max(numbers)}")

実行結果:

最小値: 1
最大値: 9
最小値: 1
最大値: 9

10. まとめ

このレッスンでは、主要なリストメソッドの活用方法を学びました。

  • sort, reverse, count, index, copy などの基本メソッドを使えます。
  • データ整形や検索をメソッドで簡潔に書けるようになりました。
  • 破壊的操作と非破壊的操作の違いを理解して使い分けられます。
  • メソッドの返り値とリスト本体の変化を確認することが重要です。
  • 処理目的に合ったメソッド選択が、可読性と保守性を高めます。