ぱんだシェア

日常生活のお役立ち情報を紹介していきます

Pythonのlistの並び替え

Pythonのlistのsortについて、まとめてみました。

まず、pythonには大きく分けてsortとsotedの二種類があります。

sort()

まずは、sortから。

sortはもとのリストオブジェクトの順序を変えてしまう破壊的なメソッドです。

以下のようなlistがあたっとします。

list = [1,2,4,5,3]

これをsortメソッドでsortすると、以下のようになります。

>>> list.sort()
[1,2,3,4,5]  

引数に何も指定しないと、昇順で並び替えます。引数にreverse=Trueを指定すれば、降順に指定することができます。

>>> list.sort(reverse=True)
[5,4,3,2,1]

sorted()

pythonのsortedメソッドは、listを並び替えたものを返してくれる非破壊的なメソッドです。

例えば、使い方はsortとあまり変わりません。

>>> s_list = sorted(list)
>>> print(s_list)
>>> [1,2,3,4,5]

おなじく、引数に何も指定しないと昇順なので、降順にしたい場合は、reverse=Trueを指定します。

>>> s_list = sorted(list)
>>> print(s_list, reverse=True)
>>> [5,4,3,2,1]

多次元リストのsort

以下のような生徒の成績表を記録したリストがあります。

list = [['Taro',40,40],['Hanako', 30,70],['Koji', 10,100]]
[名前、国語の点数、英語の点数]

これを英語の点数が高い順番にsortしたい場合は、keyを指定すれば可能です。

>>> list = [['Taro',40,40],['Hanako', 30,70],['Koji', 10,100]]
>>> s_list = sorted(list, key=lambda x: x[2], reverse=True)
>>> s_list
[['Koji', 10, 100], ['Hanako', 30, 70], ['Taro', 40, 40]]

番外編 stableとunstableなソート

ソートには色々なアルゴリズムがありますが、pythonのbuit-inメソッドのsort()とsorted()はどちらもstableなソートメソッドです。 つまり、最初の順番を保証してくれるってこと。

>>> list = [('Aiku',100),('Taro', 50),('Kiku', 22),('Hana', 50)]
>>> s_list = sorted(list, key=lambda x: x[1])
>>> s_list
[('Kiku', 22), ('Taro', 50), ('Hana', 50), ('Aiku', 100)]

どういうことかというと、pythonのsoretdメソッドは、stableなメソッドなので、tupleの二番目の要素で比較して一緒だった時、順番は最初のときと変わりません。 TaroとHanakoは同じ50点ですが、最初の順番通りです。

しかし、unstableなメソッドはこのような結果になることもあります。

[('Kiku', 22),('Hana', 50),  ('Taro', 50), ('Aiku', 100)]

自分が使っているsortのアルゴリズムがstableかどうかは注意したほうが良いかもしれませんね。