pythonのlistのソート方法や
key引数を使用した複雑なソートをしたいなーと思っている方
今回はpythonでのsortの方法について
詳しく解説していきます
この記事を読むとわかること・・・
- リストのソート方法を学びたい人
- key引数/lambdaを使った複雑なソートを理解したい人
- 具体的なコード例を求めている人
Pythonのリストのソート基本方法(sort,sorted関数)
Pythonでリストをソートするのはとても簡単ですが
用途に応じて使い分けるべき方法がいくつかあります
まず、基本となるソート方法は、大きく以下の2つあります
- リスト自体を変更するsort()関数
- リストのコピーを作成してソート結果を返すsorted()関数
sort関数とsorted関数について具体例を出して違いを解説します
sort関数
sort()関数は、リストの内容を直接変更します
つまり、元のリストがソートされたリストに変更されるので
元のリストは上書きされてしまいます
使用する場面としては以下のような場合です
- 元のリストを保持する必要がない場合
- メモリ効率を重視する場合
sort関数の使い方は以下のとおり
numbers = [4, 2, 9, 1]
numbers.sort()
print(numbers) # 出力: [1, 2, 4, 9]
sorted関数
一方、sorted()関数は、元のリストは保持したまま
新しいソート済みリストを返します
使用する場面としては以下のような場合です
- 元のリストを保持しておきたい場合
sort関数の使い方は以下のとおり
numbers = [4, 2, 9, 1]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 出力: [1, 2, 4, 9]
print(numbers) # 出力: [4, 2, 9, 1] (元のリストは変更されません)
keyを指定するソート方法
次に、より複雑なソートが必要な場合に便利な
key引数を指定するソート方法について解説します
key引数の使い方と役割
key引数の使用例としては以下ような場面があります
- 文字列の長さでソートしたい場合
- 特定の要素に基づいてリストをソートしたい場合
key引数を指定する場合、keyに指定した文字列などを
各要素に適用する必要があります
その方法として、最も一般的なのはlambda関数を使用する方法です
key引数を使用したソート方法の具体例は以下のとおりです
words = ["apple", "banana", "cherry", "date"]
words.sort(key=lambda x: len(x))
print(words) # 出力: ['date', 'apple', 'banana', 'cherry']
このコードの処理の流れは以下のとおりです
- wordsリストの各要素がlambda x: len(x)関数に渡される
- lambda関数は、各要素の文字数を取得して返す
- sort()関数は、返された文字数を基にリストをソートする
さまざまなソートの具体例を紹介
ここではソートの具体例をいくつか紹介しておくので
実際に使用する際に参考にしてみてください
例1: リストの文字列を逆順にソートする
words = ["apple", "banana", "cherry", "kaki"]
words.sort(key=lambda x: x[::-1]) # ::-1はxの要素を逆順にする
print(words)
# 出力: ['banana', 'apple', 'kaki', 'cherry']
この例では、各文字列を逆順(‘apple’→’elppa’)にして
その順序でリストをソートします
結果として、元のリストが逆さ文字のアルファベット順で並べ替えられます
各要素を逆順にするとこんな感じになってます
"apple"[::-1] # 出力: 'elppa'
"banana"[::-1] # 出力: 'ananab'
"cherry"[::-1] # 出力: 'yrrehc'
"kaki"[::-1] # 出力: 'ikak'
例2: リストの数値を絶対値でソートする
numbers = [-10, 20, -30, 15]
numbers.sort(key=lambda x: abs(x))
print(numbers)
# 出力: [-10, 15, 20, -30]
このコードは数値の絶対値を基準に
リストをソートしています
負の数も正の数と同様に扱われ、絶対値が小さい順に並びます
絶対値の大きい順に並べたい場合はreverse=Trueとします
numbers.sort(key=lambda x: abs(x), reverse=True)
print(numbers)
# 出力: [-30, 20, 15, -10]
例3: リストの複数条件でのソート(アルファベット順+長さ)
words = ["abc", "abcd", "bcd", "bcde", "bbbbbb", "aaaaaa"]
words.sort(key=lambda x: (x[0], len(x)))
print(words)
# 出力: ['abc', 'abcd', 'aaaaaa', 'bcd', 'bcde', 'bbbbbb']
このコードの処理手順は
- x[0]→1文字目をアルファベット順ソート
- len(x)→文字列の長さでリストをソート
例4: 辞書型のリストを特定のキーでソートする
people = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 35}]
people.sort(key=lambda x: x["age"])
print(people)
# 出力: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]
このコードは、各辞書のageキーを
基準にしてソートしています
結果として、リストは年齢順に並びます。
例5: タプルリストを2番目の要素でソートする
products = [("Laptop", 900), ("Smartphone", 600), ("Tablet", 300)]
products.sort(key=lambda x: x[1])
print(products)
# 出力: [('Tablet', 300), ('Smartphone', 600), ('Laptop', 900)]
このコードは、タプルの2番目の要素(価格)を
基準にリストがソートされます
結果として、価格が低い順に商品が並びます
このようにカスタムキーとlambda関数を使用することで
リスト、辞書、タプルなどの要素を好きな順番で
並び替えることができます
sort関数、lambda関数を使いこなして
ソートをマスターできるように一緒にがんばりましょう!