【Python入門】list.sort()の使い方まとめ

その他

「数字のリストを小さい順に並び替えたい」
「名前の一覧をあいうえお順にしたい」

Pythonでこうした操作を行いたいときに便利なのが、list.sort()メソッドです。

この記事では、sort()の基本的な使い方から、いろいろな並び替え方法、注意点や実践的な使い方までを初心者にもわかりやすく説明します。


スポンサーリンク

list.sort()とは?基本的な使い方

書き方

リスト.sort()

使用例:数字を小さい順に並び替える

# 数字のリストを作成
numbers = [5, 2, 9, 1]

# 小さい順に並び替える
numbers.sort()

# 結果を確認
print(numbers)  # [1, 2, 5, 9]

特徴

  • リスト自身が並び替えられます
  • 戻り値はNone(何も返さない)
  • 「元のリストを変更する」方法です

大きい順に並び替える方法

reverse=True を使う

# 数字のリストを作成
numbers = [5, 2, 9, 1]

# 大きい順に並び替える
numbers.sort(reverse=True)

# 結果を確認
print(numbers)  # [9, 5, 2, 1]

文字も大きい順に並び替えられる

# ひらがなのリスト
hiragana = ["う", "あ", "お", "い"]

# あいうえお順の逆(おうい...順)
hiragana.sort(reverse=True)
print(hiragana)  # ['お', 'う', 'い', 'あ']

条件を指定して並び替える(key引数)

文字の長さで並び替える

# 動物の名前リスト
animals = ["ぞう", "きりん", "ねこ"]

# 文字の長さで並び替える
animals.sort(key=len)

# 結果を確認
print(animals)  # ['ねこ', 'ぞう', 'きりん']

辞書のリストを特定の値で並び替える

# 生徒の成績データ
students = [
    {"名前": "田中", "点数": 75},
    {"名前": "佐藤", "点数": 90},
    {"名前": "鈴木", "点数": 85}
]

# 点数で並び替える
students.sort(key=lambda x: x["点数"])

# 結果を確認
print("点数の低い順:")
for student in students:
    print(f"{student['名前']}:{student['点数']}点")

sort()を使うときの注意点

注意点1:戻り値は何もない

# よくある間違い
numbers = [3, 1, 2]
result = numbers.sort()  # ここが間違い!

print(result)   # None(何も入っていない)
print(numbers)  # [1, 2, 3](こちらが正しい結果)

正しい使い方:

numbers = [3, 1, 2]
numbers.sort()  # 戻り値を受け取らない
print(numbers)  # [1, 2, 3]

注意点2:違う種類のデータが混じっているとエラー

# 数字と文字が混じったリスト
mixed = [1, "二", 3]

# これはエラーになる
# mixed.sort()  # TypeError: 数字と文字は比較できない

対策:

# 同じ種類のデータだけに整理する
numbers_only = [1, 3]  # 数字だけ
strings_only = ["一", "二", "三"]  # 文字だけ

numbers_only.sort()
strings_only.sort()

注意点3:元の順序は復元できない

# 元のリスト
original_order = [5, 2, 9, 1]
print(f"元の順序:{original_order}")

# 並び替えると元の順序は失われる
original_order.sort()
print(f"並び替え後:{original_order}")  # [1, 2, 5, 9]

# 元の順序に戻すことはできない!

対策:元の順序を残したい場合

# 元のリストをコピーしてから並び替える
original = [5, 2, 9, 1]
sorted_copy = original.copy()
sorted_copy.sort()

print(f"元のリスト:{original}")      # [5, 2, 9, 1]
print(f"並び替えたリスト:{sorted_copy}")  # [1, 2, 5, 9]

いろいろな応用テクニック

大文字小文字を無視して並び替える

# 大文字小文字が混じった文字
names = ["banana", "Apple", "cherry"]

# 大文字小文字を無視して並び替え
names.sort(key=str.lower)

print(names)  # ['Apple', 'banana', 'cherry']

数字として並び替える(文字列の場合)

# 数字だけど文字として保存されているリスト
number_strings = ["10", "2", "30"]

# 文字として並び替え(間違った結果)
wrong_sort = number_strings.copy()
wrong_sort.sort()
print(f"文字として並び替え:{wrong_sort}")  # ['10', '2', '30']

# 数字として並び替え(正しい結果)
number_strings.sort(key=int)
print(f"数字として並び替え:{number_strings}")  # ['2', '10', '30']

あいうえお順の逆順

# ひらがなのリスト
words = ["さくら", "あめ", "うみ"]

# あいうえお順
words_normal = words.copy()
words_normal.sort()
print(f"あいうえお順:{words_normal}")

# あいうえお順の逆
words_reverse = words.copy()
words_reverse.sort(reverse=True)
print(f"逆順:{words_reverse}")

実際に使える例

例1:テストの点数を整理

# クラスのテスト点数
test_scores = [85, 92, 78, 95, 88, 76, 90]

# 低い点数から並び替え
low_to_high = test_scores.copy()
low_to_high.sort()

# 高い点数から並び替え
high_to_low = test_scores.copy()
high_to_low.sort(reverse=True)

print(f"元の順序:{test_scores}")
print(f"低い順:{low_to_high}")
print(f"高い順:{high_to_low}")

例2:名簿をあいうえお順に整理

# クラスの名簿(バラバラの順序)
class_list = ["田中", "佐藤", "鈴木", "高橋", "伊藤"]

print(f"元の名簿:{class_list}")

# あいうえお順に並び替え
class_list.sort()
print(f"あいうえお順:{class_list}")

例3:商品を価格順に並び替え

# 商品情報のリスト
products = [
    {"商品名": "りんご", "価格": 150},
    {"商品名": "バナナ", "価格": 100},
    {"商品名": "みかん", "価格": 120},
    {"商品名": "ぶどう", "価格": 300}
]

# 価格の安い順に並び替え
products.sort(key=lambda x: x["価格"])

print("価格の安い順:")
for product in products:
    print(f"{product['商品名']}:{product['価格']}円")

例4:ファイル名を整理

# ファイル名のリスト
files = ["画像3.jpg", "画像1.jpg", "画像10.jpg", "画像2.jpg"]

# 普通に並び替え(文字順)
files_copy1 = files.copy()
files_copy1.sort()
print(f"文字順:{files_copy1}")

# 番号を考慮して並び替え
import re

def get_number(filename):
    # ファイル名から数字を取り出す
    match = re.search(r'(\d+)', filename)
    return int(match.group(1)) if match else 0

files_copy2 = files.copy()
files_copy2.sort(key=get_number)
print(f"番号順:{files_copy2}")

例5:成績の順位を決める

# 生徒の全科目成績
students = [
    {"名前": "田中", "国語": 85, "数学": 90, "英語": 78},
    {"名前": "佐藤", "国語": 92, "数学": 85, "英語": 88},
    {"名前": "鈴木", "国語": 78, "数学": 95, "英語": 85},
    {"名前": "高橋", "国語": 88, "数学": 82, "英語": 90}
]

# 合計点を計算する関数
def calculate_total(student):
    return student["国語"] + student["数学"] + student["英語"]

# 合計点の高い順に並び替え
students.sort(key=calculate_total, reverse=True)

print("成績順位:")
for i, student in enumerate(students, 1):
    total = calculate_total(student)
    print(f"{i}位:{student['名前']} 合計{total}点")

sort()を使う場面・使わない場面

sort()を使う場面

  • 元のリストを変更してもよいとき
  • メモリを節約したいとき
  • そのリストをずっと使い続けるとき
# 例:在庫管理で商品を整理
inventory = ["商品C", "商品A", "商品B"]
inventory.sort()  # 元のリストを整理
print(f"整理された在庫:{inventory}")

sort()を使わない場面

  • 元のリストを残したいとき
  • 一時的に並び替えたいとき
# 例:元のリストを残したい場合はsorted()を使う
original = [3, 1, 2]
sorted_list = sorted(original)  # 新しいリストを作成

print(f"元のリスト:{original}")      # [3, 1, 2]
print(f"並び替えたリスト:{sorted_list}") # [1, 2, 3]

まとめ

list.sort()は、Pythonでリストを並び替える最も基本的で効率的な方法です。元のリストを変更するため、必要に応じてsorted()と使い分けましょう。

この記事のポイント

  • sort()はリストそのものを並び替えるメソッド
  • 昇順・降順・条件指定など、柔軟な並び替えが可能
  • 戻り値はNoneで、元のリストが直接変更される
  • sorted()との違いを理解して使い分けると便利

コメント

タイトルとURLをコピーしました