2次元リストの2列目や3列目等の特定の列を基準にしてソートをする方法を説明します。
2次元リストのソート
sorted関数のkeyに、1つの引数を取る関数(ラムダ式も可)を指定することで、その戻り値を基準にソートできます。
ここでは2次元リストの2列目を基準にソートするので、2列を返すラムダ式をkeyとして渡します。
#2次元リストをソート ListInList = [[1, 3], [2, 1], [3, 2]] ListInList = sorted(ListInList, key = lambda x:x[1]) print(ListInList) """出力 [[2, 1], [3, 2], [1, 3]] """ #タプルのリストをソート tulpleInList = [(1, 3), (2, 1), (3, 2)] tulpleInList = sorted(tulpleInList, key = lambda x:x[1]) print(tulpleInList) """出力 [(2, 1), (3, 2), (1, 3)] """
- 2次元リストを生成します。
- key = lambda x:x[1]は、ListInListの各要素([1, 3], [2, 1]等)の2列目(3, 1等)(*1)の要素を返すラムダ式を指定しています。
- タプルのリストについても同様の方法でソートできます。
(*1)Pythonのリストはインデックスの開始が0からなので、インデックス0が1列目、インデックス1が2列目と対応しています。
使用例:2次元リストの2列目を基準に数値順でソート
1列目が文字列、2列目が数字(string型)の2次元リストを2列目を基準にソートする場合、2列目がint型ではないので辞書順でソートされてしまいます。数値順でソートするためには、2列目をint型に変換したうえでソートする必要があります。
下記、2次元リストの2列目を基準に数値順でソートするコードです。
n = int(input()) st = [] st = [tuple(input().split()) for _ in range(n)] #辞書順でソートされます。 st1 = sorted(st) print(*st1, sep="\n") #数値順でソートされます。 st2= sorted(st, key = lambda x: int(x[1])) print(*st2, sep="\n") """入力 3 AAA 11 BBB 2 CCC 3 """ """出力 #st1 ('AAA', '11') ('BBB', '2') ('CCC', '3') #st2 ('BBB', '2') ('CCC', '3') ('AAA', '11') """
・print(*st, sep=”\n”)については、「リストの各要素を複数行に出力」をご確認ください。
おまけ:keyは特定の列を返すラムダ式以外も指定できます
下記では、ListInListの各要素の2列目の値の1桁目を基にソートしています。
ListInList = [[1, 13], [2, 31], [3, 22]] ListInList = sorted(ListInList, key = lambda x:x[1]%10) print(ListInList) """出力 [[2, 31], [3, 22], [1, 13]] """
参考
組み込み関数 — Python 3.9.4 ドキュメント sorted
コメント