Python sortedの使い方

この記事のポイント

Pythonのsorted関数は、リストなどのデータを並び替えるための関数です。

この記事を読むと、次のようなことが身に付きます。

  • 元のデータを変更せず、新しいソート済みリストを作る方法がわかる
  • リストや辞書など、さまざまなデータを並び替える方法がわかる
  • カスタムソートやキー指定で柔軟な並び替えができるようになる

この記事を通して、sorted関数の正しい使い方をマスターすれば、複雑なデータも効率的に処理できるプログラムが書けるようになります。

目次

sortedとは?

sorted関数は、リスト文字列など、順番に並んだデータをソート(並び替える)するためのPythonの組み込み関数です。

日常生活で考えると、テストの点数一覧を点数が高い順に並べ替えたり、名簿を五十音順に並べたりすることがありますよね。sorted関数も、同じようにデータを指定した順序で並び替えたいときに使います。

sorted関数の特徴

  • 元のデータを変更せず、並び替えた新しいリストを返す
  • 数値や文字列などさまざまな種類のデータを並び替えられる
  • 昇順(小さい順)だけでなく降順(大きい順)にも対応できる
  • key引数(並び替えの基準を指定する引数)を使い、複雑な条件で並び替えられる
  • データ分析や整理など、プログラミングの多くの場面で利用される

【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング

基本構文

Python sortedの基本的な使い方をコード例で確認しましょう。最もシンプルな形では、ソートしたいデータをsorted関数に渡すだけです。

# 数値のリストをソート numbers = [3, 1, 4, 1, 5] sorted_numbers = sorted(numbers) print(sorted_numbers)

出力結果

[1, 1, 3, 4, 5]

この例では、sorted関数に数値が入ったリストnumbersを渡しています。sorted関数は、リストの要素を小さい順(昇順)に並び替えた新しいリストを作成して返します。元のnumbersの[3, 1, 4, 1, 5]自体は変更されない点に注意してください。

降順でソートしたい場合は、reverseパラメータをTrueに設定します。文字列のソートも同じように並び替えられます。

# 降順ソート animals = ["イヌ", "ネコ", "ウサギ"] sorted_animals = sorted(animals, reverse=True) print(sorted_animals)

出力結果

['ネコ', 'ウサギ', 'イヌ']

この例では、sorted関数の引数にreverse=Trueを指定しています。reverseは逆という意味で、Trueを設定するとデフォルトの昇順とは逆の降順で並び替えが行われます。

文字列の場合は辞書順(あいうえお順)で並び替えられるため、reverse=Trueによって「ネコ」から始まる逆の順序でソートされた新しいリストが作成されます。

実用例

ここからは、sorted関数を使った実践的なコード例を紹介します。数値・文字列・リストなど、さまざまなデータ型や条件でのソート方法を順に学び、実務でも応用できるスキルを身につけていきましょう。

各サンプルでは、コードの動きと出力結果を丁寧に解説し、すぐに試せる形で紹介します。最初はシンプルな例から始め、少しずつ応用的な内容にステップアップしていきます。

数値リストの昇順・降順ソート

数値データの基本的なソート処理です。成績や売上データなどの数値を扱う際によく使用されます。

scores = [85, 92, 78, 96, 88] ascending = sorted(scores) descending = sorted(scores, reverse=True) print("昇順:", ascending) print("降順:", descending)

出力結果

昇順: [78, 85, 88, 92, 96]
降順: [96, 92, 88, 85, 78]

この例では、リストをsorted関数で並び替えています。

ascending(昇順)は引数なしで呼び出しているため、デフォルトの小さい順でソートされます。descending(降順)はreverse=Trueを指定しているため、大きい順でソートされます。

sorted関数は並び替えのたびに新しいリストを作成して返すため、ascendingとdescendingはそれぞれ別のリストとして扱われます。

文字列の長さでソートする方法

文字列をアルファベット順ではなく、長さで並び替える方法です。len関数をkeyに指定することで実現できます。

animals = ["ゾウ", "キリン", "パンダ", "ライオン"] sorted_by_length = sorted(animals, key=len) print("長さ順:", sorted_by_length) print("長さの降順:", sorted(animals, key=len, reverse=True))

出力結果

長さ順: ['ゾウ', 'キリン', 'パンダ', 'ライオン']
長さの降順: ['ライオン', 'キリン', 'パンダ', 'ゾウ']

この例では、sorted関数のkey引数にlen(長さを取得する関数)を指定しています。

key引数に関数を指定すると、sorted関数はリストの各要素("ゾウ"、"キリン"など)をlen関数に渡し、その戻り値("ゾウ"なら2、"キリン"なら3)を使って並び替えを行います。

「キリン」と「パンダ」はどちらも3文字で長さが同じです。sorted関数は安定ソート(stable sort)という性質を持っており、キーの値が同じ要素同士は、元のリストにあった順序がそのまま維持されます。

元のリストでは「キリン」が「パンダ」より前にあったため、ソート後の結果でも「キリン」が「パンダ」より先に表示されます。

辞書のソート処理

辞書データを特定のキーや値でソートする方法です。データベースのような構造化されたデータを扱う際に便利です。

animal_weights = [ {"name": "ゾウ", "weight": 5000}, {"name": "ウマ", "weight": 500}, {"name": "ウサギ", "weight": 2} ] by_weight = sorted(animal_weights, key=lambda x: x["weight"]) print(by_weight)

出力結果

[{'name': 'ウサギ', 'weight': 2}, {'name': 'ウマ', 'weight': 500}, {'name': 'ゾウ', 'weight': 5000}]

この例では、辞書を要素として持つリストのanimal_weightsを並べ替えています。

key引数にはlambda関数(無名関数)を指定しています。lambda x: x["weight"]は、リストの各要素(x、この場合は各辞書)を受け取り、その辞書の"weight"キーに対応する値(5000や500など)を返す関数です。

sorted関数は、このlambda関数が返したweightの値(2, 500, 5000)を基準にリスト全体を昇順に並び替えています。

カスタム関数を使った複雑なソート

独自の条件でソートしたい場合は、カスタム関数を定義してkeyパラメータに指定します。

def custom_sort_key(animal): return len(animal), animal animals = ["イヌ", "ネコ", "ウマ", "トラ"] custom_sorted = sorted(animals, key=custom_sort_key) print("カスタムソート:", custom_sorted)

出力結果

カスタムソート: ['イヌ', 'ウマ', 'トラ', 'ネコ']

この例では、key引数に自作のcustom_sort_key関数を指定し、複雑な条件で並び替えています。

この関数は(文字数, 文字列)のタプル(複数の値の組)を返すため、文字数が同じ場合は文字列自体の辞書順でソートされます。

animalsリストの要素はすべて2文字("イヌ", "ネコ"など)です。custom_sort_key関数は、例えば"イヌ"なら(2, "イヌ")を返します。

sorted関数はタプルを比較する際、まず第1要素(文字数)を確認しますが、すべて2で同じです。そのため、第2要素の文字列("イヌ", "ネコ"など)の辞書順(あいうえお順)で並び替えられます。

タプルの特定要素でソート

タプルのリストを特定の位置の要素でソートする方法です。座標や成績データなどでよく使用されます。

animal_data = [("ライオン", 8), ("ゾウ", 12), ("ネコ", 2)] by_age = sorted(animal_data, key=lambda x: x[1]) by_name = sorted(animal_data, key=lambda x: x[0]) print("年齢順:", by_age) print("名前順:", by_name)

出力結果

年齢順: [('ネコ', 2), ('ライオン', 8), ('ゾウ', 12)]
名前順: [('ゾウ', 12), ('ネコ', 2), ('ライオン', 8)]

この例では、タプルを要素に持つリストを、key引数でタプル内の特定の位置(インデックス)を指定して並び替えています。

lambda x: x[1](2番目の要素)で年齢順に、lambda x: x[0](1番目の要素)で名前順にソートした結果が出力されます。by_ageでは、lambda x: x[1]を指定し、タプルの2番目の要素(インデックス1)である年齢(8, 12, 2)を基準に昇順ソートします。

by_nameでは、lambda x: x[0] を指定し、1番目の要素(インデックス0)である名前を基準に辞書順(あいうえお順)でソートしています。

大文字小文字を区別しない文字列ソート

英語の文字列を並び替える際、デフォルトでは大文字と小文字が区別されます。大文字・小文字を無視してアルファベット順に並び替えたい場合は、key引数にstr.lower(文字列を小文字に変換するメソッド)を指定します。

animals = ["dog", "Cat", "bird", "Elephant"] normal_sort = sorted(animals) case_insensitive = sorted(animals, key=str.lower) print("通常ソート:", normal_sort) print("大小文字無視:", case_insensitive)

出力結果

通常ソート: ['Cat', 'Elephant', 'bird', 'dog']
大小文字無視: ['bird', 'Cat', 'dog', 'Elephant']

この例では、key引数にstr.lowerメソッドを指定した場合と、指定しない場合(通常ソート)の結果を比較しています。

keyを指定しないnormal_sortでは、大文字と小文字が区別され、ASCIIコード順で並びます(一般的に大文字が小文字より先)。

一方、case_insensitiveでは、key=str.lowerによって、比較時に全要素が小文字("dog", "cat", "bird", "elephant")に変換されます。sorted関数は、この変換後の文字列を基準に並び替えるため、アルファベット順にソートされます。

日付データのソート処理

文字列形式の日付データを正しい時系列順でソートする方法です。日付管理システムでよく使用されます。

from datetime import datetime date_strings = ["2024-03-15", "2024-01-20", "2024-02-10"] sorted_dates = sorted(date_strings) print("日付順:", sorted_dates)

出力結果

日付順: ['2024-01-20', '2024-02-10', '2024-03-15']

この例では、日付を表す文字列のリストをsorted関数で並び替えています。

日付の形式が「年-月-日」のように桁数がそろった形式(ISO形式)であるため、key引数を指定しなくても時系列順にソートされます。

date_stringsの要素はYYYY-MM-DD形式の文字列です。sorted関数はkey引数がない場合、文字列を辞書順で比較します。この形式は辞書順と時系列順が一致するため、"2024-01-20"が最初に来る正しい日付順に並び替えられます。

オブジェクトの属性でソートする方法

クラスを使って作成したオブジェクトのリストを、オブジェクトが持つ特定の属性(プロパティ)を基準にソートする方法です。

class Animal: def __init__(self, name, age): self.name = name self.age = age animals = [Animal("イヌ", 5), Animal("ネコ", 3), Animal("ウサギ", 1)] by_age = sorted(animals, key=lambda x: x.age) for animal in by_age: print(f"{animal.name}: {animal.age}歳")

出力結果

ウサギ: 1歳
ネコ: 3歳
イヌ: 5歳

この例では、自作のAnimalクラスから作成したオブジェクトのリストを、key引数を使ってオブジェクトの特定の属性(age)で並び替えています。lambda関数でage属性を指定したため、年齢(age)が小さい順にソートされた結果が出力されます。

まず、Animalクラスのオブジェクト3つを含むリストanimalsを作成します。sorted関数のkeyにlambda x: x.ageを指定すると、リスト内の各オブジェクト(x)のage属性(5, 3, 1)が並び替えの基準として使われます。その結果、ageが1の「ウサギ」が最初に来る昇順のリストが作成されます。

まとめ

Pythonのsorted関数は、データを効率的に並び替える重要な標準関数です。この記事では、基本的な使い方から応用例まで解説しました。

sortedが活躍する場面

  • データ分析での数値や文字列の整理 
  • Webアプリケーションでの表示順の制御
  • ログ解析での時系列データの整理

重要なポイント

  • 元のデータを変更せず新しいリストを作成する安全性
  • keyパラメータによる柔軟なソート条件の指定が可能
  • reverseパラメータで昇順・降順を簡単に切り替えられる

初めてPythonを学ぶ方も、この記事で紹介したsorted関数を実際に書いて、基本的な使い方を試してみてください。

データを並び替える処理は、実際の開発で多く使用されます。ぜひsorted関数をマスターして、より複雑で実用的なプログラムを作成できるようになりましょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Pythonのリファレンス記事一覧
  4. Python sortedの使い方