【Python入門】配列でソート(並び替え)するには?対応メソッド・関数の使い方まとめ
配列を扱う上では、保持されている要素の順番を適切に並び替えることも大切です。
Pythonでは様々なメソッドや関数が用意されており、使用するデータ型にあわせて適切な方法を選択する必要があります。
この記事では、配列で要素をソートする際に使用するメソッド・関数の特徴と使い方について解説します。
各メソッド・機能の対応一覧
主な配列として「リスト/タプル/辞書/セット」がありますが、それぞれで使用できるメソッドは異なります。
各データ型と、対応するメソッドの一覧は以下の通りです。
配列の要素 | sort | sorted | reverse | reversed |
---|---|---|---|---|
リスト | ● | ● | ● | ● |
タプル | – | ● | – | ● |
辞書 | – | ● | – | ● |
セット | – | ● | – | ● |
配列内で要素をソートする方法
使用するメソッド・関数に応じて、昇順/降順や逆順など様々な方法での並び替えが可能です。
ここから先は、各ソート方法の特徴や具体的な使い方について紹介していきます。
【sort】要素を昇順/降順にソートする
sort()
メソッドでは、配列内の要素を昇順(0⇒9、a⇒z、あ⇒ん)に並び替えることができます。
使用する際は、ソートしたい配列(変数)の後に「.sort()」を付け加えます。
ただし、sort()
が使えるのはリスト内のデータ型が統一されている場合のみなので注意してください。
ls = ["apple", "あんこ", "1", "2", "banana", "いろ"] # lsという変数に、リストを保持
ls.sort() # ls(リスト)の要素を昇順に並び替え
print(ls) # lsの中身を表示
= 実行結果 =
['1', '2', 'apple', 'banana', 'あんこ', 'いろ']
また、オプションとして設定されているreverse
引数の値をTrue
にすると、要素を降順(ん⇒あ、z⇒a、9⇒0)に並び替えることもできます。
その場合は、 sort()
の括弧内に「reverse=True」を追記します。
ls = [-100, 0, 55, 12345, -999] # lsに、別のリストを保持
ls.sort(reverse=True) # ls(リスト)の要素を降順に並び替え
print(ls) # lsの中身を表示
= 実行結果 =
[12345, 55, 0, -100, -999]
【sorted】昇順/降順のソート結果でリストを作成
sorted()
メソッドでは、昇順(0⇒9、a⇒z、あ⇒ん)に並び替えた結果を、新たなリストとして作成することができます。
使用する際は、「保持する変数 = sorted(配列)」の形で記述します。
(この際、元の配列を保持している変数を指定すると、並び替え後の結果に上書きが可能です)
ただし、sorted()
が使えるのは配列内(辞書の場合はキー)のデータ型が統一されている場合のみなので注意してください。
tp = ("apple", "あんこ", "1", "2", "banana", "いろ") # tpという変数に、タプルを保持
tp_new = sorted(tp) # tp(タプル)を昇順にソートした結果を、tp_newに保持
print(tp) # tpの中身を表示(元のタプルはソートされない)
print(tp_new) # tp_new(リスト)の中身を表示
= 実行結果 =
('apple', 'あんこ', '1', '2', 'banana', 'いろ')
['1', '2', 'apple', 'banana', 'あんこ', 'いろ']
また、オプションとして設定されているreverse
引数の値をTrue
にすると、要素を降順(ん⇒あ、z⇒a、9⇒0)に並び替えることもできます。
その場合は、 sorted()
の括弧内に、カンマ区切りで「reverse=True」を追記します。
dt = {1: "-100", 4: "テスト", 2: 3.14, 3: True, 5: "test"} # dtという変数に、辞書を保持
dt_new = sorted(dt, reverse=True) # dt(辞書)のキーを降順にソートし、結果をdt_newに保持
print(dt) # dtの中身を表示(元の辞書はソートされない)
print(dt_new) # dt_new(リスト)の中身を表示
= 実行結果 =
{1: '-100', 4: 'テスト', 2: 3.14, 3: True, 5: 'test'}
[5, 4, 3, 2, 1]
辞書型のままソートする方法(要素/キー順)については、こちらの記事で詳しく説明してます
【reverse】要素を逆順にソートする
reverse()
メソッドでは、配列内の要素を逆順に並び替えることができます。
使用する際は、ソートしたい配列(変数)の後に「.reverse()」を付け加えます。
ls = ["apple", "あんこ", "1", "2", "banana", "いろ"] # lsという変数に、リストを保持
ls.reverse() # ls(リスト)の要素を逆順に並び替え
print(ls) # lsの中身を表示
= 実行結果 =
['いろ', 'banana', '2', '1', 'あんこ', 'apple']
ちなみに、逆順での並び替えはスライス機能を使って取得することも可能です。
その場合は、「保持する変数 = 配列[::-1]」の形で記述します。
(この際、元の配列を保持している変数を指定すると、並び替え後の結果に上書きが可能です)
ls = [-100, 0, 55, 12345, -999] # lsに、別のリストを保持
ls = ls[::-1] # ls(リスト)の要素を降順に並び替え、元の変数に上書き
print(ls) # lsの中身を表示
= 実行結果 =
[-999, 12345, 55, 0, -100]
【reversed】逆順のソート結果でイテレータを作成
reversed()
メソッドでは、逆順に並び替えた結果を「イテレータ」と呼ばれる形で作成することができます。
使用する際は、「保持する変数 = reversed(配列)」の形で記述します。
(この際、元の配列を保持している変数を指定すると、並び替え後の結果に上書きが可能です)
また、元のデータ型のままソートしたい場合は、 適切な関数(tuple()
/dict()
/set()
)を用いてreversed() の結果を変換してあげる必要があります。
tp = ("apple", "あんこ", "1", "2", "banana", "いろ") # tpという変数に、タプルを保持
tp_new = reversed(tp) # tp(タプル)を逆順にソートした結果を、tp_newに保持
print(tp) # tpの中身を表示(元のタプルはソートされない)
print(tp_new) # tp_new(リスト)の中身を表示
print(tuple(tp_new)) # tp_newをタプル型に変換して表示
= 実行結果 =
('apple', 'あんこ', '1', '2', 'banana', 'いろ')
<reversed object at 0x0000024A6B3553C0>
('いろ', 'banana', '2', '1', 'あんこ', 'apple')
まとめ
この記事では、配列で要素をソートする際に使用するメソッド・関数の特徴と使い方について解説しました。
ソートを行う時は、対象となるデータ型や用途にあわせて適切な方法を選択することが大切です。
しっかりと使い方を学んだうえで、今後のプログラミングで活用していけるようにしましょう。