Pythonのsorted()関数を徹底解説! リストや様々なデータを柔軟にソートする方法


 

Pythonプログラミングにおいて、データを特定の順序に並べ替えたい場面は非常に頻繁に訪れます。数値の昇順、文字列の降順、あるいは複雑なオブジェクトを特定の属性で並べ替えたいなど、その要求は多岐にわたります。そんな時に大活躍するのが、Pythonの組み込み関数**sorted()**です。

この記事では、sorted()関数の基本的な使い方から、様々なデータ型での適用例、そして柔軟なソートを実現するための高度なオプションまで、初心者の方にも分かりやすく徹底的に解説します。sorted()をマスターすれば、あなたのPythonコードはもっと効率的で、データ処理の幅が格段に広がるでしょう!


 

sorted()関数とは? なぜ使うのか?

 

sorted()関数は、あらゆるイテラブルなオブジェクトの要素を新しいソート済みリストとして返すための、Pythonの組み込み関数です。組み込み関数なので、import文を使って何かを読み込む必要はありません。すぐに使うことができます。

なぜsorted()を使うのでしょうか?

  • 元のデータを変更しない(非破壊的): list.sort()メソッドのように元のリストを直接変更するのではなく、常に新しいソート済みのリストを返すため、元のデータの状態を保ちたい場合に最適です。

  • 汎用性: リストだけでなく、タプル、セット、辞書(キーをソート)、文字列など、あらゆるイテラブルなオブジェクトをソートできます。

  • 柔軟なソート: ソート順(昇順/降順)や、ソートの基準となるキーを細かく指定できるため、複雑な要件にも対応できます。


 

sorted()関数の基本的な使い方

 

sorted()関数の使い方は非常にシンプルです。必須引数は一つ、ソートしたいイテラブルなオブジェクトを渡すだけです。

 

構文

 

Python
 
sorted(iterable, *, key=None, reverse=False)

 

引数

 

  • iterable (必須): ソートしたい要素を含むイテラブルなオブジェクト(リスト、タプル、セット、文字列、辞書など)。

  • key (オプション): 各要素をソートする前に適用される、1つの引数を受け取る関数。この関数の戻り値がソートの基準となります(後述の「カスタマイズソート」で詳述)。デフォルトはNoneで、要素自体が比較されます。

  • reverse (オプション): ブール値。Trueに設定すると降順にソートされます。デフォルトはFalse(昇順)。

 

戻り値

 

指定されたイテラブルの要素をソートした新しいリスト

 

具体例:数値のソート

 

Python
 
numbers = [3, 1, 4, 1, 5, 9, 2]

# 昇順ソート (デフォルト)
sorted_asc = sorted(numbers)
print(f"昇順: {sorted_asc}") # 出力: 昇順: [1, 1, 2, 3, 4, 5, 9]

# 降順ソート
sorted_desc = sorted(numbers, reverse=True)
print(f"降順: {sorted_desc}") # 出力: 降順: [9, 5, 4, 3, 2, 1, 1]

print(f"元のリスト: {numbers}") # 出力: 元のリスト: [3, 1, 4, 1, 5, 9, 2] (元のリストは変更されない)

 

様々なデータ型でのsorted()の使い方

 

sorted()関数は、Pythonの多くのイテラブル型に対して使用できます。

 

1. 文字列 (str)

 

文字列は文字のシーケンスとして扱われ、文字コード順にソートされます。

Python
 
my_string = "python"
print(sorted(my_string)) # 出力: ['h', 'n', 'o', 'p', 't', 'y']
print("".join(sorted(my_string))) # 文字列として結合: 'hnopty'

 

2. タプル (tuple)

 

タプルの要素もソートされ、結果はリストとして返されます。

Python
 
my_tuple = (30, 10, 40, 20)
print(sorted(my_tuple)) # 出力: [10, 20, 30, 40]

 

3. セット (set)

 

セットの要素は順序を持たないため、ソートすると必ず新しい順序付けられたリストになります。

Python
 
my_set = {5, 1, 3, 2, 4}
print(sorted(my_set)) # 出力: [1, 2, 3, 4, 5]

 

4. 辞書 (dict)

 

辞書をsorted()に渡すと、そのキーがソートされてリストとして返されます。

Python
 
my_dict = {"apple": 3, "orange": 1, "banana": 2}
print(sorted(my_dict)) # 出力: ['apple', 'banana', 'orange'] (キーがソートされる)

 

key引数を使ったカスタマイズソート

 

sorted()関数の最も強力な機能の一つがkey引数です。これにより、要素自体ではなく、要素の特定の部分や、要素に何らかの処理を施した結果に基づいてソートできます。

keyには、ソート対象の各要素を引数として受け取り、ソートの比較に使用する値を返す「関数」を指定します。通常はlambda式がよく使われます。

 

1. 文字列の長さを基準にソート

 

Python
 
words = ["apple", "banana", "kiwi", "grape"]
# 文字列の長さを基準にソート
sorted_by_length = sorted(words, key=len)
print(f"長さでソート: {sorted_by_length}") # 出力: 長さでソート: ['kiwi', 'apple', 'grape', 'banana']

 

2. オブジェクトの特定の属性でソート

 

クラスのインスタンスを持つリストを、特定の属性でソートしたい場合に便利です。

Python
 
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self): # オブジェクト表示用
        return f"Person('{self.name}', {self.age})"

people = [Person("Alice", 30), Person("Bob", 25), Person("Charlie", 35)]

# 年齢を基準にソート
sorted_by_age = sorted(people, key=lambda p: p.age)
print(f"年齢でソート: {sorted_by_age}")
# 出力: 年齢でソート: [Person('Bob', 25), Person('Alice', 30), Person('Charlie', 35)]

# 名前を基準に降順ソート
sorted_by_name_desc = sorted(people, key=lambda p: p.name, reverse=True)
print(f"名前(降順)でソート: {sorted_by_name_desc}")
# 出力: 名前(降順)でソート: [Person('Charlie', 35), Person('Bob', 25), Person('Alice', 30)]

lambda関数 lambda p: p.age は、「Personオブジェクト p を受け取ったら、そのage属性の値を返して、その値でソートの比較をしてね」という意味になります。


 

sorted()list.sort()の違い

 

Pythonでデータをソートする方法としては、sorted()関数の他にリストのsort()メソッドがあります。この二つには重要な違いがあります。

特徴 sorted()関数 list.sort()メソッド
対象 あらゆるイテラブル リストオブジェクトのみ
戻り値 新しいソート済みリスト None(元のリストを直接変更する)
元のデータ 変更しない(非破壊的) 直接変更する(破壊的)
メモリ 新しいリストを作成するため、元のデータのコピー分のメモリを消費する その場で変更するため、基本的にはメモリ消費が少ない
Python
 
# sorted() の例
data1 = [3, 1, 2]
result1 = sorted(data1)
print(f"sorted()の結果: {result1}") # [1, 2, 3]
print(f"元のデータ1: {data1}")      # [3, 1, 2] (変更されない)

# list.sort() の例
data2 = [3, 1, 2]
data2.sort() # 戻り値はNone
print(f"sort()後のデータ2: {data2}") # [1, 2, 3] (元のデータが変更される)

使い分けのポイント:

  • 元のデータを変更したくない、またはリスト以外のイテラブルをソートしたい場合sorted()

  • リストの内容をその場でソートしたい(破壊的ソートで構わない)場合list.sort()


 

まとめ

 

sorted()関数は、Pythonでデータを柔軟かつ効率的にソートするための、非常に強力な組み込み関数です。

  • あらゆるイテラブルなオブジェクトの要素をソートし、新しいソート済みリストを返す(非破壊的)。

  • key引数を使うことで、ソートの基準を自由にカスタマイズできる。

  • reverse=True降順ソートが可能。

  • リストのsort()メソッドとの違い(非破壊的か破壊的か、対象のデータ型)を理解して適切に使い分けることが重要。

sorted()関数を使いこなすことで、Pythonでのデータ処理が格段にスムーズになり、より高度なロジックを簡潔に記述できるようになるでしょう。ぜひ今日学んだことを、あなたのコーディングに活かしてみてくださいね!


 

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座