Pythonでリストを並べ替える方法を解説!sortとsortedの使い分けからkey引数まで
Pythonでは、整数・浮動小数点数・文字列などのリストは、sortメソッドを呼び出すだけで簡単に並べ替えができます。また、降順(逆順)でソートしたい場合は、reverseパラメータにTrueを指定するだけです。
sortメソッドを使った基本的な並べ替え
まずは、昇順と降順それぞれのソート例を見てみましょう。
my_list = [1, 5, 2, 6, 0] my_list.sort() print(my_list) my_list.sort(reverse=True) print(my_list)
出力結果
[0, 1, 2, 5, 6] [6, 5, 2, 1, 0]
このように、sort()を呼び出すだけで元のリスト自体が昇順に並べ替えられ、reverse=Trueを渡せば降順になります。
sorted関数を使った並べ替え
タプルはイミュータブル(変更不可)なため、タプルに対して直接呼び出せるインプレースなソート関数は存在しません。そのような場合や、元のリストを変更せずに新しいソート済みリストを作りたい場合には、組み込み関数のsortedを使用します。sortedは、並べ替えた結果を新しいリストとして返してくれます。
my_list = [1, 5, 2, 6, 0] print(sorted(my_list)) print(sorted(my_list, reverse=True))
出力結果
[0, 1, 2, 5, 6] [6, 5, 2, 1, 0]
sort()が元のリストを直接書き換えるのに対し、sorted()は元のデータを保持したまま新しいリストを返すという違いがあります。状況に応じて使い分けるとよいでしょう。
key引数を使ったカスタムソート
クラスに比較用の特殊メソッドが実装されていないオブジェクトのリストを並べ替えたい場合は、key引数に関数を指定することで、要素同士をどのように比較するかを定義できます。
例えば、辞書型のオブジェクトが入ったリストがあり、特定のキー(ここでは「size」)の値を基準に並べ替えたい場合は、次のように記述します。
def get_my_key(obj):
return obj['size']
my_list = [{'name': "foo", 'size': 5}, {'name': "bar", 'size': 3}, {'name': "baz", 'size': 7}]
my_list.sort(key=get_my_key)
print(my_list)出力結果
[{'name': 'bar', 'size': 3}, {'name': 'foo', 'size': 5}, {'name': 'baz', 'size': 7}]このコードでは、リスト内の各要素に対して指定した関数が呼び出され、その戻り値(ここでは'size'の値)を基準にソートが行われます。辞書だけでなく、独自クラスのオブジェクトにも同じ考え方を適用できます。例えば、オブジェクトの属性値を返す関数をkeyに渡せば、その属性を基準にした並べ替えが可能です。
さらに、Pythonではlambda式を使えば、わざわざ関数を定義しなくても一行で書けるので便利です。
my_list.sort(key=lambda obj: obj['size'])
このように、Pythonのソート機能はシンプルな数値や文字列のリストだけでなく、複雑なオブジェクトのリストにも柔軟に対応できるのが魅力です。用途に合わせてsortとsorted、そしてkey引数を上手に活用してみてください。
-
Pythonでリストのサイズ(要素数)を取得する方法|len関数の使い方を解説
Pythonでリストのサイズ(要素数)を調べたいときは、組み込み関数 len() を使います。これは最もシンプルで標準的な方法です。len() 関数とはPython公式ドキュメントでは、len() について次のように説明されています。「len(arg) はオブジェクトの長さ(要素の数)を返します。引数には、文字列・bytes・タプル・リスト・range などのシーケンス、あるいは辞書・セット・frozenset などのコレクションを指定できます。」len() は組み込み関数であるため、追加のインポートは不要です。また、ユーザー定義クラスが特殊メソッド __len__ を実装していれば、そのクラ
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>