Pythonのsorted()とsort()の違いを完全解説【初心者向け】
Pythonでリストをソートする際に、sorted()とsort()という2つの方法があります。どちらも要素を並び替える機能ですが、重要な違いがあります。この記事では、両者の違いを具体例とともに詳しく解説します。
sorted()とsort()の基本的な違い
sorted()関数の特徴
sorted()は新しいリストを作成してソート結果を返します。元のリストは変更されません。
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(f"元のリスト: {numbers}") # [3, 1, 4, 1, 5]
print(f"ソート後: {sorted_numbers}") # [1, 1, 3, 4, 5]
sort()メソッドの特徴
sort()は元のリストを直接変更します。新しいリストは作成されず、戻り値はNoneです。
numbers = [3, 1, 4, 1, 5]
numbers.sort()
print(f"ソート後: {numbers}") # [1, 1, 3, 4, 5]
主な違いの比較表
| 項目 | sorted() | sort() |
|---|---|---|
| 元のリスト | 変更されない | 変更される |
| 戻り値 | 新しいソート済みリスト | None |
| 適用対象 | あらゆるイテラブル | リストのみ |
| メモリ使用量 | 多い(新しいリスト作成) | 少ない(元のリストを変更) |
使い分けのポイント
sorted()を使う場面
元のデータを保持したい場合
original = [5, 2, 8, 1]
display_sorted = sorted(original)
print(f"元データ: {original}") # [5, 2, 8, 1]
print(f"表示用: {display_sorted}") # [1, 2, 5, 8]
タプルや文字列をソートする場合
text = "python"
sorted_chars = sorted(text)
print(sorted_chars) # ['h', 'n', 'o', 'p', 't', 'y']
sort()を使う場面
メモリ効率を重視する場合
large_list = list(range(1000000, 0, -1))
large_list.sort() # メモリ効率が良い
元のリストが不要な場合
scores = [85, 92, 78, 96, 88]
scores.sort(reverse=True) # 降順ソート
print(scores) # [96, 92, 88, 85, 78]
カスタムソートの例
両方ともkeyパラメータとreverseパラメータを使用できます。
words = ["apple", "pie", "banana"]
# sorted()での文字列長ソート
sorted_words = sorted(words, key=len)
print(sorted_words) # ['pie', 'apple', 'banana']
# sort()での逆順ソート
words.sort(reverse=True)
print(words) # ['pie', 'banana', 'apple']
パフォーマンスの違い
大きなデータセットでは、メモリ使用量とパフォーマンスに違いが現れます。
import time
# 大きなリストでのテスト
big_list = list(range(100000, 0, -1))
# sort()のテスト
start = time.time()
big_list.sort()
sort_time = time.time() - start
# sorted()のテスト(新しいリストで)
big_list2 = list(range(100000, 0, -1))
start = time.time()
sorted_list = sorted(big_list2)
sorted_time = time.time() - start
print(f"sort(): {sort_time:.4f}秒")
print(f"sorted(): {sorted_time:.4f}秒")
まとめ
- 元のデータを保持したい →
sorted()を使用 - メモリ効率を重視 →
sort()を使用 - リスト以外をソート →
sorted()を使用 - 元のリストが不要 →
sort()を使用
適切な選択により、より効率的で読みやすいPythonコードを書くことができます。データの性質と要件に応じて、最適な方法を選択しましょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座


