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爆速講座