こんにちは、のちたままです。
ここでは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
それでは。