MENU

ソートの使い方~基本から応用まで~[Pythonプログラミング]

こんにちは、のちたままです。

ここではPythonプログラミングで使われるソート(list.sort, sorted)の使い方について紹介したいと思います。

ソートの使い方[基本編]

ソートにはリストに使えるsort()と、辞書などのリスト以外でも使えるsorted()があります。

使い勝手としてsortedの方が良いと思います。

・sort()の使い方

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

・sorted()の使い方

>>> sorted([1, 5, 3, 4, 2])
[1, 2, 3, 4, 5]

sort()はリストに対して使うため、予めリストが存在している必要があります。

sorted()のように

ソートは基本的に昇順(値が小さい順)で返します。

降順にする方法などは次の応用編で紹介します。

ソートの使い方[応用編]

ここからは昇順、降順の使い分けやkeyパラメータについて紹介します。

これらを使うことで細かい操作ができるようになります。

昇順、降順について

昇順はデフォルトなので省略します。

降順(値が大きい順)にしたい場合はreverseを使います。

例えば数字を降順に並べるには次のように書きます。

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

ちなみに、reverse=Falseにすると昇順にすることができます。

keyパラメータ

keyパラメータはどういう基準でソートするかというものを指定するものです。

例えば以下の文章を単語ごとにソートしてみます。

This is a test string from Andrew

これをkeyパラメータを指定せずにソートすると以下のようになります。

>>> sorted("This is a test string from Andrew")
['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']

keyパラメータにstr.lowerを指定すると以下のようになります。

>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

str.lowerは文字列をすべて小文字にするということです。

つまり、小文字の文字列で並び替えるということを基準にしています。

言い換えれば、大文字と小文字の区別をせずに並べるということになります。

keyパラメータにはlambda関数を指定することもできます。

例えば以下のような辞書データがあったとします。

drink=[
['name' : 'water', 'price' : 10],
['name' : 'wine', 'price' : 130],
['name' : 'coke', 'price' : 110],
['name' : 'juice', 'price' : 80]]

このデータを値段(price)を基準としてソートしてみます。

上記のreverseを使って降順にすると以下のようになります。

>>> sorted(drink, key=lambda x: x['price'], reverse=True)
[{'name': 'wine', 'price': 130}, {'name': 'coke', 'price': 110}, {'name': 'juice', 'price': 80}, {'name': 'water', 'price': 10}]

最後に

ソートは使えるようになると大変便利なものです。

key関数には今回は紹介しきれなかったoperatorモジュール関数も使えるので、興味があったら調べてみてください。

itemgetter(),attrgetter(),methodcaller()を見ると良いと思います。

以下のURLが参考になると思います。

https://docs.python.org/ja/3/library/operator.html#module-operator

それでは。