「リストの数字を小さい順に並べたい」
「文字列をアルファベット順に整理したい」
このような並び替え(ソート)を行いたいとき、Pythonではsort()
メソッドがとても便利です。
sort()
を使うことで、リストの要素を簡単に昇順や降順に並び替えることができます。
この記事では、sort()
の基本的な使い方から、応用的なカスタムソート、sorted()
との違いまで、初心者の方にもわかりやすく解説します。
sortメソッドの基本的な使い方

数字のリストを並び替える
sort()
メソッドを使うと、リストの要素を小さい順(昇順)に並び替えることができます。
numbers = [3, 1, 4, 2, 5]
print(f"並び替え前: {numbers}")
numbers.sort()
print(f"並び替え後: {numbers}")
実行結果:
並び替え前: [3, 1, 4, 2, 5]
並び替え後: [1, 2, 3, 4, 5]
とても簡単ですね!sort()
を呼び出すだけで、リストが自動的に昇順に並び替えられます。
sortの重要な特徴
sort()
メソッドには以下の特徴があります:
- 破壊的操作:元のリストそのものが変更される
- 戻り値なし:戻り値は
None
- 昇順がデフォルト:特に指定しなければ小さい順に並ぶ
original_list = [9, 3, 7, 1]
result = original_list.sort()
print(f"元のリスト: {original_list}") # 変更されている
print(f"戻り値: {result}") # None
実行結果:
元のリスト: [1, 3, 7, 9]
戻り値: None
降順(大きい順)で並び替える

reverse=Trueオプション
大きい順に並び替えたいときは、reverse=True
を指定します。
scores = [85, 92, 78, 96, 88]
print(f"元の点数: {scores}")
scores.sort(reverse=True)
print(f"高い順: {scores}")
実行結果:
元の点数: [85, 92, 78, 96, 88]
高い順: [96, 92, 88, 85, 78]
reverseパラメータの使い分け
指定方法 | 並び順 | 例 |
---|---|---|
sort() または sort(reverse=False) | 昇順(小さい順) | [1, 2, 3, 4, 5] |
sort(reverse=True) | 降順(大きい順) | [5, 4, 3, 2, 1] |
文字列のリストを並び替える
アルファベット順に並び替え
文字列のリストも同じように並び替えできます。
fruits = ["banana", "apple", "cherry", "date"]
print(f"並び替え前: {fruits}")
fruits.sort()
print(f"アルファベット順: {fruits}")
実行結果:
並び替え前: ['banana', 'apple', 'cherry', 'date']
アルファベット順: ['apple', 'banana', 'cherry', 'date']
日本語の文字列も並び替え可能
names = ["田中", "佐藤", "鈴木", "高橋"]
names.sort()
print(f"五十音順: {names}")
実行結果:
五十音順: ['佐藤', '田中', '鈴木', '高橋']
大文字と小文字の扱い
英語の場合、大文字と小文字では大文字が先に来ることに注意してください。
words = ["apple", "Banana", "cherry", "Date"]
words.sort()
print(f"結果: {words}")
実行結果:
結果: ['Banana', 'Date', 'apple', 'cherry']
大文字小文字を区別せずに並び替えたい場合は、後で説明するkey
パラメータを使います。
カスタムソート:keyパラメータの活用

文字列の長さで並び替え
key
パラメータを使うと、独自の基準で並び替えができます。
words = ["python", "java", "c", "javascript"]
print(f"元のリスト: {words}")
words.sort(key=len)
print(f"文字数順: {words}")
実行結果:
元のリスト: ['python', 'java', 'c', 'javascript']
文字数順: ['c', 'java', 'python', 'javascript']
len
関数をkey
に指定することで、文字列の長さを基準に並び替えています。
絶対値で並び替え
負の数を含む数値リストを、絶対値の大きさで並び替える例:
numbers = [10, -5, 3, -15, 1]
print(f"元のリスト: {numbers}")
numbers.sort(key=abs)
print(f"絶対値順: {numbers}")
実行結果:
元のリスト: [10, -5, 3, -15, 1]
絶対値順: [1, 3, -5, 10, -15]
ラムダ式を使った複雑な条件
ラムダ式を使うと、より複雑な並び替え条件を指定できます。
# 数字を「偶数を先に、その中で昇順」で並び替え
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
numbers.sort(key=lambda x: (x % 2, x))
print(f"偶数優先: {numbers}")
実行結果:
偶数優先: [2, 4, 6, 8, 1, 3, 5, 7]
この例では、x % 2
で偶数(0)か奇数(1)かを判定し、同じグループ内ではx
の値で並び替えています。
大文字小文字を区別しない並び替え
words = ["apple", "Banana", "cherry", "Date"]
words.sort(key=str.lower)
print(f"大文字小文字無視: {words}")
実行結果:
大文字小文字無視: ['apple', 'Banana', 'cherry', 'Date']
より複雑なデータの並び替え
辞書のリストを並び替え
students = [
{"name": "田中", "score": 85},
{"name": "佐藤", "score": 92},
{"name": "鈴木", "score": 78}
]
# 点数で並び替え
students.sort(key=lambda student: student["score"])
print("点数の低い順:")
for student in students:
print(f"{student['name']}: {student['score']}点")
実行結果:
点数の低い順:
鈴木: 78点
田中: 85点
佐藤: 92点
タプルのリストを並び替え
products = [
("りんご", 150),
("バナナ", 100),
("オレンジ", 200)
]
# 価格(2番目の要素)で並び替え
products.sort(key=lambda x: x[1])
print("価格の安い順:")
for name, price in products:
print(f"{name}: {price}円")
実行結果:
価格の安い順:
バナナ: 100円
りんご: 150円
オレンジ: 200円
複数の条件で並び替え
employees = [
("田中", 25, 5000000),
("佐藤", 30, 6000000),
("鈴木", 25, 4500000),
("高橋", 30, 5500000)
]
# 年齢順、同じ年齢なら給与順で並び替え
employees.sort(key=lambda x: (x[1], x[2]))
print("年齢→給与順:")
for name, age, salary in employees:
print(f"{name}: {age}歳, {salary:,}円")
実行結果:
年齢→給与順:
鈴木: 25歳, 4,500,000円
田中: 25歳, 5,000,000円
高橋: 30歳, 5,500,000円
佐藤: 30歳, 6,000,000円
sort()とsorted()の違い

基本的な違い
Pythonにはsort()
メソッドの他に、sorted()
関数もあります。この2つは似ていますが、重要な違いがあります。
特徴 | list.sort() | sorted() |
---|---|---|
対象 | リストのみ | あらゆるイテラブル |
元データ | 変更される | 変更されない |
戻り値 | None | 新しいリスト |
使用方法 | メソッド | 関数 |
実際の比較
# sort()の場合
original = [3, 1, 4, 2]
print(f"元のリスト: {original}")
result_sort = original.sort()
print(f"sort()後の元リスト: {original}")
print(f"sort()の戻り値: {result_sort}")
print("---")
# sorted()の場合
original2 = [3, 1, 4, 2]
print(f"元のリスト: {original2}")
result_sorted = sorted(original2)
print(f"sorted()後の元リスト: {original2}")
print(f"sorted()の戻り値: {result_sorted}")
実行結果:
元のリスト: [3, 1, 4, 2]
sort()後の元リスト: [1, 2, 3, 4]
sort()の戻り値: None
---
元のリスト: [3, 1, 4, 2]
sorted()後の元リスト: [3, 1, 4, 2]
sorted()の戻り値: [1, 2, 3, 4]
sorted()の活用例
# 元のデータを保持しつつ、複数の並び順で表示
scores = [85, 92, 78, 96, 88]
print(f"元の点数: {scores}")
print(f"昇順: {sorted(scores)}")
print(f"降順: {sorted(scores, reverse=True)}")
print(f"元のリストは変更されていない: {scores}")
実行結果:
元の点数: [85, 92, 78, 96, 88]
昇順: [78, 85, 88, 92, 96]
降順: [96, 92, 88, 85, 78]
元のリストは変更されていない: [85, 92, 78, 96, 88]
よくあるエラーと対処法

異なる型が混在している場合
# エラーになる例
mixed_data = [1, "two", 3, "four"]
# mixed_data.sort() # TypeError が発生
エラーメッセージ:
TypeError: '<' not supported between instances of 'str' and 'int'
対処法:
# 文字列に統一してから並び替え
mixed_data = [1, "two", 3, "four"]
mixed_data_str = [str(item) for item in mixed_data]
mixed_data_str.sort()
print(f"文字列として並び替え: {mixed_data_str}")
実行結果:
文字列として並び替え: ['1', '3', 'four', 'two']
Noneが含まれている場合
# Noneが含まれているリスト
data_with_none = [3, None, 1, None, 2]
# Noneを除外してから並び替え
filtered_data = [x for x in data_with_none if x is not None]
filtered_data.sort()
print(f"None除外後: {filtered_data}")
実行結果:
None除外後: [1, 2, 3]
戻り値を間違って使う場合
# 間違った使い方
numbers = [3, 1, 4, 2]
# sorted_numbers = numbers.sort() # Noneが代入される
# 正しい使い方
numbers = [3, 1, 4, 2]
numbers.sort() # リスト自体が変更される
print(f"正しい結果: {numbers}")
# または
numbers2 = [3, 1, 4, 2]
sorted_numbers = sorted(numbers2) # sorted()を使う
print(f"sorted()の結果: {sorted_numbers}")
パフォーマンスと効率性
大きなリストでの並び替え
import time
import random
# 大きなリストを作成
large_list = [random.randint(1, 10000) for _ in range(100000)]
# sort()の時間測定
start_time = time.time()
large_list.sort()
end_time = time.time()
print(f"10万要素の並び替え時間: {end_time - start_time:.4f}秒")
メモリ効率の考慮
# メモリ効率を重視する場合は sort() を使用
large_data = list(range(1000000, 0, -1))
# sort(): 元のリストを変更(メモリ効率が良い)
large_data.sort()
# sorted(): 新しいリストを作成(メモリを多く使用)
# new_data = sorted(large_data) # 2倍のメモリが必要
実用的な活用例
ファイルサイズ順でファイルリストを並び替え
files = [
("document.txt", 1024),
("image.jpg", 2048000),
("video.mp4", 104857600),
("script.py", 4096)
]
# ファイルサイズ順で並び替え
files.sort(key=lambda x: x[1])
print("ファイルサイズ順:")
for filename, size in files:
if size < 1024:
size_str = f"{size}B"
elif size < 1024**2:
size_str = f"{size//1024}KB"
else:
size_str = f"{size//1024**2}MB"
print(f"{filename}: {size_str}")
実行結果:
ファイルサイズ順:
document.txt: 1KB
script.py: 4KB
image.jpg: 1MB
video.mp4: 100MB
試験結果の集計と順位付け
test_results = [
{"name": "田中", "math": 85, "english": 78},
{"name": "佐藤", "math": 92, "english": 88},
{"name": "鈴木", "math": 76, "english": 95},
{"name": "高橋", "math": 88, "english": 82}
]
# 合計点で並び替え
test_results.sort(key=lambda x: x["math"] + x["english"], reverse=True)
print("合計点順位:")
for i, student in enumerate(test_results, 1):
total = student["math"] + student["english"]
print(f"{i}位: {student['name']} (数学:{student['math']}, 英語:{student['english']}, 合計:{total})")
実行結果:
合計点順位:
1位: 佐藤 (数学:92, 英語:88, 合計:180)
2位: 鈴木 (数学:76, 英語:95, 合計:171)
3位: 高橋 (数学:88, 英語:82, 合計:170)
4位: 田中 (数学:85, 英語:78, 合計:163)
まとめ
sort()
メソッドは、Pythonでリストを並び替えるための基本的で強力な機能です。
重要なポイント
sort()
はリスト自体を変更する(破壊的操作)- 戻り値は
None
reverse=True
で降順、key
パラメータでカスタムソートsorted()
は新しいリストを返す(元は変更しない)
使い分けの指針
状況 | 使うべきメソッド | 理由 |
---|---|---|
元のリストを変更してもよい | sort() | メモリ効率が良い |
元のリストを保持したい | sorted() | 元データが保護される |
リスト以外も並び替えたい | sorted() | あらゆるイテラブルに対応 |
よく使うパターン
並び替え方法 | コード例 |
---|---|
昇順 | list.sort() |
降順 | list.sort(reverse=True) |
文字列長順 | list.sort(key=len) |
絶対値順 | list.sort(key=abs) |
辞書のキー順 | list.sort(key=lambda x: x['key']) |
コメント