はじめに
Pythonで他の配列を参考にリストを並べ替える方法について解説します。
※プログラミング関係の内容を他にも投稿していますので、よろしければこちらの一覧から他の投稿も見て頂けますと幸いです。
実現したいこと
input_list = ['ten', 'nine', 'three']
このようなリストが与えられた際に数として並べ替えたい。つまり、数字の3,9,10の順に従って、['three', 'nine', 'ten']と出力したい。
listの並び替えの復習
リストは以下のように並べ替え可能です。
name_list = ["Charle", "Mike", "Bob", "Alice"]
sorted(name_list)
出力
['Alice', 'Bob', 'Charle', 'Mike']
並べ方を逆にすることも可能です。
sorted(name_list, reverse=True)
出力
['Mike', 'Charle', 'Bob', 'Alice']
複数の要素を持つ配列の並び替え
以下のように実行可能です。
age_tuples = {
("Charle", 20),
("Mike", 15),
("Bob", 30),
("Alice", 25)
}
sorted(age_tuples)
出力
[('Alice', 25), ('Bob', 30), ('Charle', 20), ('Mike', 15)]
これは1つ目の要素がアルファベット順に並んでいることが分かります。では、これを2つ目の要素である数値順に並び変えます。ここで、lambdaを使います。lambdaの使い方はこちらやそちらやあちらのサイトを参考にしました。
sorted(age_tuples, key=lambda age_tuples: age_tuples[1])
出力
[('Mike', 15), ('Charle', 20), ('Alice', 25), ('Bob', 30)]
参考サイトによると、lambdaの使い方は次の通りです。
-
Pythonではdef文で関数を定義するが、lambda(ラムダ式)で名前を持たない無名関数を作成することもできる。
-
lambdaは引数として関数(呼び出し可能なオブジェクト)を指定する場合などに使うと便利。書き方および使い方を説明する。
実現したいことの回答
以上を踏まえて次のようなコードになりました。
input_list = ['ten', 'nine', 'three']
num_dict = {
'one':1,
'two':2,
'three':3,
'four':4,
'five':5,
'six':6,
'seven':7,
'eight':8,
'nine':9,
'ten':10,
}
result_list = sorted(input_list, key=lambda x: num_dict[x])
print(result_list)
出力
['three', 'nine', 'ten']