【python】listのソート方法を世界一わかりやすく解説

pythonのlistのソート方法や

key引数を使用した複雑なソートをしたいなーと思っている方

今回はpythonでのsortの方法について

詳しく解説していきます

おへんじ
具体例を出していろんな方法を解説するね

この記事を読むとわかること・・・

  • リストのソート方法を学びたい人
  • key引数/lambdaを使った複雑なソートを理解したい人
  • 具体的なコード例を求めている人

Pythonのリストのソート基本方法(sort,sorted関数)

Pythonでリストをソートするのはとても簡単ですが

用途に応じて使い分けるべき方法がいくつかあります

まず、基本となるソート方法は、大きく以下の2つあります

  • リスト自体を変更するsort()関数
  • リストのコピーを作成してソート結果を返すsorted()関数
おへんじ
この2つの違いを理解することが、sort操作をマスターするための第一歩だよ

sort関数とsorted関数について具体例を出して違いを解説します

sort関数

sort()関数は、リストの内容を直接変更します

つまり、元のリストがソートされたリストに変更されるので

元のリストは上書きされてしまいます

使用する場面としては以下のような場合です

  • 元のリストを保持する必要がない場合
  • メモリ効率を重視する場合
おへんじ
新しいリストが生成されないためメモリが節約できるよ

sort関数の使い方は以下のとおり

numbers = [4, 2, 9, 1]
numbers.sort()
print(numbers)  # 出力: [1, 2, 4, 9]
【豆知識】Pythonのソートはデフォルトでは数値やアルファベット順で行われます

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引数を指定する場合、keyに指定した文字列などを

各要素に適用する必要があります

その方法として、最も一般的なのはlambda関数を使用する方法です

key引数を使用したソート方法の具体例は以下のとおりです

words = ["apple", "banana", "cherry", "date"]
words.sort(key=lambda x: len(x))
print(words)  # 出力: ['date', 'apple', 'banana', 'cherry']

このコードの処理の流れは以下のとおりです

  1. wordsリストの各要素がlambda x: len(x)関数に渡される
  2. lambda関数は、各要素の文字数を取得して返す
  3. sort()関数は、返された文字数を基にリストをソートする
おへんじ
len関数は文字列が渡された場合は文字数を返すよ

さまざまなソートの具体例を紹介

ここではソートの具体例をいくつか紹介しておくので

実際に使用する際に参考にしてみてください

例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]
おへんじ
reverse=Trueにすると指定した並び順の逆になるよ

例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']

このコードの処理手順は

  1. x[0]→1文字目をアルファベット順ソート
  2. 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関数を使用することで

リスト、辞書、タプルなどの要素を好きな順番で

並び替えることができます

おへんじ
keyを指定する場合にデータ型が一致しているかは確認するようにしてね
見習くん
データ型が間違っていると思わぬソート結果になっちゃいますよね

sort関数、lambda関数を使いこなして

ソートをマスターできるように一緒にがんばりましょう!

最新情報をチェックしよう!