Pythonの関数を使ったカスタムソート(keyパラメータ)をわかりやすく解説!初心者でも使える並べ替えテクニック
生徒
「Pythonでリストを並べ替えるときに、自分の好きなルールで並べたいです。どうしたらできますか?」
先生
「それなら、Pythonのソート関数にあるkeyというパラメータを使う方法がおすすめです。これを使うと、自分で並べ替えの基準を自由に決められますよ。」
生徒
「keyパラメータって何ですか?どうやって使うんでしょう?」
先生
「これから基本からわかりやすく説明しますね。具体的な例もたくさん紹介します!」
1. Pythonのソートとは?
Pythonにはリストを並べ替えるためのsort()メソッドやsorted()関数があります。これらはデフォルトで数字や文字を小さい順やアルファベット順に並べ替えます。
例えば、数字のリストを小さい順に並べ替えたいときはこう書きます。
numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers) # [1, 2, 5, 9]
このままだと単純な昇順や降順ですが、「もっと複雑なルールで並べたい!」というときはどうするでしょう?
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を使いこなして、複雑な条件でも思い通りにリストを整理しましょう。
初心者でも使いやすいので、ぜひ色んな例で試してみてくださいね。