「リストの値を順番に並べ替えたい」
「データを一時的にソートしたい」
Pythonには、リストを並び替えるための便利な方法が2つあります。
それが sort()
メソッドと sorted()
関数です。
この記事では、初心者がつまずきやすいsort()とsorted()の違い・使い方・注意点・応用例まで、わかりやすく説明します。
sort()とsorted()の基本的な使い方

sort()メソッド:リストを直接並び替える
# 数字のリストを作成
my_list = [3, 1, 2]
# リストを直接並び替える
my_list.sort()
# 結果を確認
print(my_list) # [1, 2, 3]
特徴:
- リスト自身を変更します
- 戻り値は
None
(何も返さない)
sorted()関数:新しいリストを返す
# 数字のリストを作成
my_list = [3, 1, 2]
# 新しい並び替えたリストを作成
new_list = sorted(my_list)
# 結果を確認
print(new_list) # [1, 2, 3]
print(my_list) # [3, 1, 2](元のまま)
特徴:
- 元のリストは変更されません
- 新しい並び替えたリストを返します
sort()とsorted()の違いを整理
比較項目 | sort() | sorted() |
---|---|---|
使える対象 | リストだけ | リスト、タプルなど何でも |
戻り値 | None (何も返さない) | 新しいリスト |
元のリスト | 変更される | 変更されない |
使う場面 | リスト自体を変更したいとき | 元のリストを残したいとき |
違いを確認する例
# 元のリスト
original = [5, 2, 8, 1]
# sort()を使う場合
list1 = original.copy() # コピーを作成
list1.sort()
print(f"sort()使用後:{list1}") # [1, 2, 5, 8]
# sorted()を使う場合
list2 = sorted(original)
print(f"sorted()の結果:{list2}") # [1, 2, 5, 8]
print(f"元のリスト:{original}") # [5, 2, 8, 1](変更されていない)
いろいろな並び替え方法
大きい順に並び替える(降順)
# 数字のリスト
nums = [5, 2, 9, 1]
# sort()で降順
nums_sort = nums.copy()
nums_sort.sort(reverse=True)
print(f"sort()で降順:{nums_sort}") # [9, 5, 2, 1]
# sorted()で降順
nums_sorted = sorted(nums, reverse=True)
print(f"sorted()で降順:{nums_sorted}") # [9, 5, 2, 1]
文字の長さで並び替える
# 動物の名前リスト
animals = ["ぞう", "ねこ", "きりん", "うま"]
# 文字の長さで並び替え
sorted_by_length = sorted(animals, key=len)
print(f"文字の長さ順:{sorted_by_length}") # ['ぞう', 'ねこ', 'うま', 'きりん']
# 文字の長さで長い順に並び替え
sorted_by_length_desc = sorted(animals, key=len, reverse=True)
print(f"文字の長い順:{sorted_by_length_desc}") # ['きりん', 'ぞう', 'ねこ', 'うま']
辞書のリストを特定の値で並び替える
# 生徒の情報リスト
students = [
{"名前": "田中", "年齢": 15},
{"名前": "佐藤", "年齢": 14},
{"名前": "鈴木", "年齢": 16}
]
# 年齢順に並び替え
sorted_by_age = sorted(students, key=lambda x: x["年齢"])
print("年齢順:")
for student in sorted_by_age:
print(f" {student['名前']}さん({student['年齢']}歳)")
よくある注意点とエラー

注意点1:sort()の戻り値を間違える
# よくある間違い
data = [3, 1, 2]
result = data.sort() # ここが間違い!
print(result) # None(何も入っていない)
print(data) # [1, 2, 3](こちらが正しい結果)
正しい使い方:
data = [3, 1, 2]
data.sort() # 戻り値を受け取らない
print(data) # [1, 2, 3]
注意点2:違う種類のデータが混じっているとエラー
# 数字と文字が混じったリスト
mixed = [1, "二", 3]
# これはエラーになる
# sorted(mixed) # TypeError: 数字と文字は比較できない
対策:
# 数字だけ取り出して並び替え
numbers_only = [x for x in mixed if isinstance(x, int)]
sorted_numbers = sorted(numbers_only)
print(sorted_numbers) # [1, 3]
注意点3:大文字と小文字の順番
# 大文字と小文字が混じった文字
words = ["banana", "Apple", "cherry"]
# 普通に並び替え(大文字が先に来る)
normal_sort = sorted(words)
print(f"普通のソート:{normal_sort}") # ['Apple', 'banana', 'cherry']
# 大文字小文字を無視して並び替え
case_ignore = sorted(words, key=str.lower)
print(f"大文字小文字無視:{case_ignore}") # ['Apple', 'banana', 'cherry']
実際に使える例
例1:テストの点数を高い順に並び替え
# テストの点数リスト
test_scores = [85, 92, 78, 95, 88]
# 高い順に並び替え
high_to_low = sorted(test_scores, reverse=True)
print("テスト結果(高い順):")
for i, score in enumerate(high_to_low, 1):
print(f"{i}位:{score}点")
例2:名前をあいうえお順に並び替え
# クラスの名簿
class_members = ["田中", "佐藤", "鈴木", "高橋", "伊藤"]
# あいうえお順に並び替え
sorted_members = sorted(class_members)
print("あいうえお順の名簿:")
for i, name in enumerate(sorted_members, 1):
print(f"{i}. {name}")
例3:商品を価格順に並び替え
# 商品リスト
products = [
{"商品名": "りんご", "価格": 150},
{"商品名": "バナナ", "価格": 100},
{"商品名": "みかん", "価格": 120}
]
# 価格の安い順に並び替え
cheap_to_expensive = sorted(products, key=lambda x: x["価格"])
print("価格の安い順:")
for product in cheap_to_expensive:
print(f"{product['商品名']}:{product['価格']}円")
例4:ファイル名を整理
# ファイル名リスト
files = ["レポート3.txt", "レポート1.txt", "レポート10.txt", "レポート2.txt"]
# 普通に並び替え(文字順)
normal_sort = sorted(files)
print(f"文字順:{normal_sort}")
# 数字部分を考慮して並び替え(応用例)
import re
def extract_number(filename):
match = re.search(r'(\d+)', filename)
return int(match.group(1)) if match else 0
number_sort = sorted(files, key=extract_number)
print(f"数字順:{number_sort}")
例5:成績表の作成
# 生徒の成績データ
grades = [
{"名前": "田中", "国語": 85, "数学": 90, "英語": 78},
{"名前": "佐藤", "国語": 92, "数学": 85, "英語": 88},
{"名前": "鈴木", "国語": 78, "数学": 95, "英語": 85}
]
# 合計点で並び替え
def total_score(student):
return student["国語"] + student["数学"] + student["英語"]
ranked_students = sorted(grades, key=total_score, reverse=True)
print("成績順位:")
for i, student in enumerate(ranked_students, 1):
total = total_score(student)
print(f"{i}位:{student['名前']}(合計{total}点)")
どちらを使うべき?

sort()を使う場面
- 元のリストを変更してもよいとき
- メモリを節約したいとき
- そのリストを今後もずっと使うとき
# 例:在庫リストを整理
inventory = ["商品C", "商品A", "商品B"]
inventory.sort() # 元のリストを直接整理
print(inventory) # ['商品A', '商品B', '商品C']
sorted()を使う場面
- 元のリストを残したいとき
- 一時的に並び替えたいとき
- 複数の並び方を試したいとき
# 例:いろいろな順番で表示
scores = [85, 92, 78, 95, 88]
print("元の順番:", scores)
print("小さい順:", sorted(scores))
print("大きい順:", sorted(scores, reverse=True))
print("元の順番(確認):", scores) # 変更されていない
まとめ
Pythonでは、状況に応じて sort()
と sorted()
を使い分けることで、データの並び替えを柔軟かつ安全に行うことができます。
この記事のポイント
sort()
はリストを その場で変更、何も返さないsorted()
は 元を変更せず新しいリストを返すkey
で条件指定、reverse=True
で降順にも対応- 違う種類のデータや戻り値の扱いには注意
コメント