Pythonの関数を使ったカスタムソート(keyパラメータ)をわかりやすく解説!初心者でも使える並べ替えテクニック
生徒
「Pythonでリストを並べ替えるときに、自分の好きなルールで並べたいです。どうしたらできますか?」
先生
「それなら、Pythonのソート関数にあるkeyというパラメータを使う方法がおすすめです。これを使うと、自分で並べ替えの基準を自由に決められますよ。」
生徒
「keyパラメータって何ですか?どうやって使うんでしょう?」
先生
「これから基本からわかりやすく説明しますね。具体的な例もたくさん紹介します!」
1. Pythonのソートとは?
Pythonにはリストを並べ替えるためのsort()メソッドやsorted()関数があります。これらはデフォルトで数字や文字を小さい順やアルファベット順に並べ替えます。
sort()は元のリストの順番を直接変更するのに対し、sorted()は新しいリストを作って返すという違いがあります。用途に応じて使い分けることが大切です。
例えば、数字のリストを小さい順に並べ替えたいときはこう書きます。
numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers) # [1, 2, 5, 9]
また、元のデータを残したい場合はsorted()を使います。
numbers = [5, 2, 9, 1]
new_numbers = sorted(numbers)
print(new_numbers) # [1, 2, 5, 9]
print(numbers) # 元のリストはそのまま
このように基本的なソートはとても簡単に行えます。ただし、このままだと単純な昇順や降順の並べ替えしかできません。「文字の長さで並べたい」「特定の条件で順番を変えたい」といった場合は、もう一歩進んだ方法が必要になります。
2. keyパラメータとは?
keyパラメータは、ソートする基準を指定できる引数です。keyに「関数」を渡すことで、リストの各要素をその関数に渡し、戻り値をもとに並べ替えます。
わかりやすく例えると、各要素に「評価点」をつけて、その点数で並べるようなイメージです。
この関数をカスタムできるので、自分の好きなルールで並べられます。
3. 関数を使ったカスタムソートの基本
たとえば、文字列のリストを「文字の長さ」で並べ替えたいとします。その場合、len関数をkeyに指定します。
words = ['apple', 'banana', 'cherry', 'date']
words.sort(key=len)
print(words) # ['date', 'apple', 'banana', 'cherry']
このように、key=lenで「単語の長さ」を基準にソートしています。
4. オリジナル関数を使ってソートする方法
さらに、自分で作った関数もkeyに指定できます。たとえば、単語の最後の文字で並べたいときは、こう書きます。
def last_char(word):
return word[-1] # 単語の最後の文字を返す
words = ['apple', 'banana', 'cherry', 'date']
words.sort(key=last_char)
print(words) # ['banana', 'apple', 'date', 'cherry']
この例では、関数last_charが単語の最後の文字を返し、その文字を基準に並べ替えています。
5. sorted()関数でもkeyパラメータが使える
sorted()関数は元のリストを変更せず、新しいソート済みのリストを返します。ここでもkeyパラメータが使えます。
numbers = [5, 2, 9, 1]
sorted_numbers = sorted(numbers, key=lambda x: -x) # 降順に並べ替え
print(sorted_numbers) # [9, 5, 2, 1]
print(numbers) # 元のリストは変わらない [5, 2, 9, 1]
この例では、lambda関数を使って、数字をマイナスに変換し、降順に並べています。
6. lambda式(無名関数)を使ったカスタムソート
ここで出てきたlambdaは、「名前のない関数」を簡単に書く方法です。簡単な処理をすぐに作りたいときに便利です。
例えば、文字列の最初の文字で並べるなら、こんな感じです。
words = ['apple', 'banana', 'cherry', 'date']
words.sort(key=lambda w: w[0])
print(words) # ['apple', 'banana', 'cherry', 'date']
このように、一行で関数を作って渡すことができます。
7. 実用例:辞書のリストを特定のキーでソートする
たとえば、名前と年齢が入った辞書のリストを、年齢でソートしたいとき。
people = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob', 'age': 25},
{'name': 'Charlie', 'age': 35}
]
people.sort(key=lambda person: person['age'])
print(people)
出力は年齢の小さい順に並びます。
[{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]
8. keyパラメータで自由にソートできる!
Pythonのソートでkeyパラメータを使うと、並べ替えのルールを自由にカスタマイズできます。関数やlambdaを使いこなして、複雑な条件でも思い通りにリストを整理しましょう。
初心者でも使いやすいので、ぜひ色んな例で試してみてくださいね。
まとめ
Pythonのカスタムソートを振り返る
ここまでPythonのソート処理とkeyパラメータを使ったカスタムソートについて学びました。Pythonではリストの並べ替えを行う方法としてsortメソッドとsorted関数が用意されています。これらを使うことで数値や文字列を簡単に並べ替えることができます。しかし実際のプログラム開発では単純な昇順や降順だけでなく独自のルールで並び替えたい場面が多くあります。そのようなときに重要になるのがkeyパラメータです。
keyパラメータを利用するとリストの要素を関数に渡しその戻り値を基準として並び替えが行われます。つまり要素そのものではなく評価値を基準にしてソートされる仕組みです。この考え方を理解するとPythonのリスト操作は非常に柔軟になります。例えば文字列の長さ順に並べる場合や辞書データの特定のキーを基準に並べる場合などさまざまなデータ整理に応用できます。
sortとsortedの違いを理解する
Pythonの並べ替え処理ではsortメソッドとsorted関数の違いを理解することが重要です。sortメソッドはリスト自身を直接並べ替えるメソッドです。そのため処理が終わると元のリストの順序が変更されます。一方でsorted関数は元のデータを変更せず新しいソート済みリストを作成して返します。データを保持したまま並べ替え結果だけを取得したい場合はsorted関数が便利です。
numbers = [8, 3, 5, 1, 9]
# sortは元のリストを変更する
numbers.sort()
print(numbers)
# sortedは新しいリストを作る
numbers = [8, 3, 5, 1, 9]
new_numbers = sorted(numbers)
print(new_numbers)
print(numbers)
[1, 3, 5, 8, 9]
[1, 3, 5, 8, 9]
[8, 3, 5, 1, 9]
このように用途によって使い分けることでデータ操作の安全性と柔軟性を高めることができます。Pythonのプログラミングではリスト操作が非常に多く登場するためこの違いを理解しておくと実務でも役立ちます。
lambdaを使ったシンプルなカスタムソート
Pythonではlambda式という無名関数を利用することで簡単にkey関数を作成できます。小さな処理のためにわざわざ関数を定義する必要がないためコードを短く書けるのが特徴です。特にリスト並べ替え処理ではlambda式がよく利用されます。Python学習者が早い段階で覚えておくと便利な書き方です。
words = ["python", "code", "programming", "ai", "data"]
# 文字数で並べ替え
words.sort(key=lambda w: len(w))
print(words)
['ai', 'code', 'data', 'python', 'programming']
このコードではlambda式を使い単語の長さを基準として並び替えています。短い単語から順番に並ぶ結果になります。このようにlambda式はPythonのカスタムソートを理解するうえで非常に重要な書き方です。
辞書データの並べ替え
Pythonの実務的なプログラムでは辞書型データを含むリストを扱うことがよくあります。例えばユーザー情報商品情報成績データなど多くのデータは辞書形式で管理されます。これらを特定のキーで並び替えるときにもkeyパラメータが活躍します。
students = [
{"name": "sato", "score": 70},
{"name": "tanaka", "score": 85},
{"name": "suzuki", "score": 60},
{"name": "ito", "score": 90}
]
students.sort(key=lambda s: s["score"])
for s in students:
print(s["name"], s["score"])
suzuki 60
sato 70
tanaka 85
ito 90
このように辞書の値を基準に並べ替えることでデータ分析や成績管理などの処理が簡単になります。Pythonのデータ処理やデータ分析の基礎として非常に重要なテクニックです。
Pythonのカスタムソートを理解するとできること
Pythonのkeyパラメータを理解するとさまざまなデータ整理が可能になります。例えば文字列の長さ順並び替え辞書データの値による並び替え日付順の並び替えファイルサイズ順の整理など多くの場面で応用できます。Pythonプログラミングの中でも特に重要なテクニックの一つです。
またPythonのソート処理は内部で高速なアルゴリズムが使用されているため大量のデータを扱う場合でも効率よく並び替えを行うことができます。初心者のうちは単純な並び替えから始め徐々にカスタムソートの考え方を身につけると理解が深まります。
Python学習の中ではリスト操作データ整理データ分析の場面で必ずソート処理が登場します。keyパラメータとlambda式を使いこなすことでより実用的なPythonプログラムを書くことができるようになります。今回学んだ内容を参考にさまざまなデータでカスタムソートを試しながら理解を深めていきましょう。
生徒
今日の学習でPythonの並べ替え処理がとても便利だと分かりました。普通の並び替えだけでなく自分でルールを作って並べ替えられるのが面白いです。
先生
その通りです。Pythonのkeyパラメータはとても強力な機能です。関数を使って評価値を作ることで自由な並び替えができます。データ整理やデータ分析ではとても重要な技術です。
生徒
sortとsortedの違いも理解できました。元のリストを変更するかどうかで使い分けるのですね。
先生
そうです。元データを残したい場合はsorted関数を使うと安全です。プログラムを書くときはデータの扱い方を意識することが大切です。
生徒
lambda式もとても便利ですね。短い関数をすぐに作れるのでコードがすっきりします。
先生
その感覚はとても良いです。Pythonではシンプルで読みやすいコードを書くことが大切です。lambda式とkeyパラメータを組み合わせると多くのデータ処理を簡潔に書くことができます。
生徒
これからはリストや辞書データを扱うときにカスタムソートを積極的に使ってみたいです。
先生
とても良い姿勢です。Pythonのカスタムソートを理解するとデータ整理やプログラム作成の幅が大きく広がります。いろいろな例で試しながらPythonプログラミングの理解をさらに深めていきましょう。