配列をソートする方法です。
Pythonを使った様々なソートを解説します。
リストでソート
リストでは、ソートする方法が2つあります。
sorted() | 組み込み関数 | 新たにソートされたリストが返される |
list.sort() | リスト型のメソッド | 元のリストをソート |
sorted(*, key=None, reverse=False)
sorted関数は、 元のリストはそのままで、新たにソートしたリストを返します。
before = [2, 4, 0, 5, 1]
after = sorted(before)
print('before: ', before)
print('after : ', after)
before: [2, 4, 0, 5, 1]
after : [0, 1, 2, 4, 5]
beforeに変化はなく、afterにはbeforeが昇順にソートされたリストが入っています。
sorted()は、デォルトは昇順で、省略できます。
降順にするときは、reverseをTrueにします。
before = [2, 4, 0, 5, 1]
after = sorted(before, reverse=True)
print('before: ', before)
print('after : ', after)
before: [2, 4, 0, 5, 1]
after : [5, 4, 2, 1, 0]
list.sort(key=None, reverse=False )
list.sort()は、元のリストをソートします。
sort()は、リストのメソッドなので、変数の後にドット(.)を付けて使います。
before = [2, 4, 0, 5, 1]
after = before.sort()
print('before: ', before)
print('after : ', after)
before: [0, 1, 2, 4, 5]
after : None
before自身が昇順にソートされます。
sorted関数との混乱をさけるために、Noneが返されます。
reverseの使い方は、sortedと同じです。
before = [2, 4, 0, 5, 1]
after = before.sort(reverse=True)
print('before: ', before)
print('after : ', after)
before: [5, 4, 2, 1, 0]
after : None
パラメーターの詳しい使い方は、次の記事をご覧ください。
>>【Python入門】リストのソート(昇順、降順、複数key)
numpyでソート
一次元配列は、numpy.sort()で昇順にソートされます。
numpy.sort()
import numpy as np
before = np.array([2, 4, 0, 5, 1])
after = np.sort(before)
print('before: ', before)
print('after : ', after)
before: [2 4 0 5 1]
after : [0 1 2 4 5]
numpy.sort()には、降順にする引数(パラメーター)がない。
後ろからスライスして、降順にする。
reverse = after[::-1]
print('reverse: ', reverse)
reverse: [5 4 2 1 0]
pandasでソート
pandasで、一次元配列はpandas.Seriesで扱い、sort_values()で昇順にソートします。
sort_values(ascending=True)
import pandas as pd
before = pd.Series([2, 4, 0, 5, 1])
after = before.sort_values()
print('before: ', before)
print('after : ', after)
before: 0 2
1 4
2 0
3 5
4 1
dtype: int64
after : 2 0
4 1
0 2
1 4
3 5
dtype: int64
左の数字がインデックス、右の数字が要素です。
要素が昇順になっています。
降順にするときは、引数ascendingをFalseにします。
before = pd.Series([2, 4, 0, 5, 1])
after = before.sort_values(ascending=False)
print('before: ', before)
print('after : ', after)
before: 0 2
1 4
2 0
3 5
4 1
dtype: int64
after : 3 5
1 4
0 2
4 1
2 0
dtype: int64
まとめ
- 配列(リスト、numpy、pandas) のソートができました
- リストとpandasは引数を使って、昇順と降順を設定しました
- numpyは降順を設定する引数がないので、後ろからスライスしました