【Python入門】配列のソート(昇順、降順)

sort list

配列をソートする方法です。

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は降順を設定する引数がないので、後ろからスライスしました

関連情報

タイトルとURLをコピーしました