ソート

リストに格納されているデータを並び替えることができます。これをソートと言います。

sorted()

組み込み関数のsorted()を利用する方法です。小さい順に並びます。 sorted()の戻り値が並び替わったリストである点に注意しましょう。元のリストの並び順は変更されません。

# ボーリングの得点
score_list = [98, 220, 201, 145, 180]

# 並び替え
sorted_score = sorted(score_list)

# 表示
print(sorted_score)
print(score_list)

実行結果:

[98, 145, 180, 201, 220]
[98, 220, 201, 145, 180]

list.sort()

リストのメソッドlist.sort()は、組み込み関数sorted()と同じようにリストの要素を並べ替えます。

list.sort()を利用すると元のリストが並び替わってしまうことを覚えましょう。戻り値はNoneになります。

# ボーリングの得点
score_list = [98, 220, 201, 145, 180]

# 並び替え
sorted_score = score_list.sort()

# 表示
print('score_list=', score_list)
print('sorted_score=', sorted_score)

実行結果:

score_list= [98, 145, 180, 201, 220]
sorted_score= None

list.sort()は、元のリストが必要ない場合に利用します。元のリストが並び替わってしまうと混乱を招きやすいので、組み込み関数sorted()を利用することをおすすめまします。

文字列のソート

プログラムでは文字列にも順序があります。文字を直接コンピューターが理解するのは難しいので、内部では数値のようなコードに置き換えて利用しています。 この文字をコンピューター上でどのように扱うか決めた仕組みが文字コードです。色々な仕組みがあります。 Python3は、Unicodeを利用しています。

組み込み関数のord()は、引数として指定した文字に紐付いた数値を返します。文字列のソートはこの順番で並び替えます。アルファベットの大文字、小文字で順番が違うことを確認してください。

print(ord('a'))  # -> 97
print(ord('A'))  # -> 65

大文字小文字が混ざっているリストを並び替えてみます。

score_list = ['z', 'a', 'A', 'c', 'K']

sorted_score = sorted(score_list)

print(sorted_score)

実行結果:

['A', 'K', 'a', 'c', 'z']

Unicodeについて詳しく知りたい方は、Unicode HOWTOを参照ください。

昇順と降順

引数にreverse=Trueを指定すると降順に並べられます。 通常の並びを昇順(しょうじゅん)、その逆を降順(こうじゅん)と言います。

# ボーリングの得点
score_list = [98, 220, 201, 145, 180]

# 並び替え
sorted_score = sorted(score_list, reverse=True)

# 表示
print(sorted_score)  # -> [220, 201, 180, 145, 98]

辞書をソートする

同じように辞書のソートも行えます。

sample_dict = {'a':'C', 'b':'B', 'c': 'A'}

# キーのソート
sorted_taple_list = sorted(sample_dict)
print(sorted_taple_list)

# 値のソート
sorted_taple_list = sorted(sample_dict.values())
print(sorted_taple_list)

# タプルのソート
sorted_taple_list = sorted(sample_dict.items())
print(sorted_taple_list)

実行結果:

['a', 'b', 'c']
['A', 'B', 'C']
[('a', 'C'), ('b', 'B'), ('c', 'A')]

値のソートを行い、結果をタプルのリストで受け取るにはlambdaを利用します。

sample_dict = {'a':'C', 'b':'B', 'c': 'A'}

# タプルのソート
sorted_taple_list = sorted(sample_dict.items(), key=lambda x:x[1])
print(sorted_taple_list)
# [('c', 'A'), ('b', 'B'), ('a', 'C')]

他にも、operatorモジュール関数を利用する方法もあります。

ソートについて詳しくは、ソート HOW TOを参照ください。