Numpyを使わなくても簡単に2次元配列のソートができます。
昇順sort()
・降順sort(reverse=True)
・逆順reverse()
の関数を2次元配列に適用した結果を記載します。
lambda関数を使った応用も追加しました。
動作確認:Python 3.6
準備
ソートに利用するの2次元配列を用意しました。 以降はこの配列に対して実行します。
arr = [[0, 10, 6], [5, 7, 4], [9, 6, 3], [6, 3, 6], [9, 2, 9], [0, 6, 9]]
print(*arr, sep='\n')
"""
[0, 10, 6]
[5, 7, 4]
[9, 6, 3]
[6, 3, 6]
[9, 2, 9]
[0, 6, 9]
"""
出力は# => 出力
複数行の場合は"""\n出力\n"""
として表現していく。
結果を見やするため、配列をアンパックして表示しています。
2次元配列をソート
sort()
arr = [[6, 10, 6], [3, 4, 9], [5, 7, 4], [9, 6, 3], [6, 3, 6], [9, 2, 9], [0, 6, 9], [7, 4, 4], [2, 1, 10], [8, 9, 3]]
arr.sort()
print(*arr, sep='\n')
"""
[0, 6, 9]
[0, 10, 6]
[5, 7, 4]
[6, 3, 6]
[9, 2, 9]
[9, 6, 3]
"""
sort()
で2次元配列もソート出来ます。
特に指定もなく、1番目の要素を基準に並べている。
中身を確かめている時に気づいたが、2、3番目の要素もちゃんとソートされている。 ありがたい。
sorted()
同様にsorted()
を使ってもソート出来ます。
arr = [[0, 10, 6], [5, 7, 4], [9, 6, 3], [6, 3, 6], [9, 2, 9], [0, 6, 9]]
arr = sorted(arr)
print(*arr, sep='\n')
"""
[0, 6, 9]
[0, 10, 6]
[5, 7, 4]
[6, 3, 6]
[9, 2, 9]
[9, 6, 3]
"""
降順 sort(reverse=True)
降順も同じように可能です。
arr = [[0, 10, 6], [5, 7, 4], [9, 6, 3], [6, 3, 6], [9, 2, 9], [0, 6, 9]]
arr.sort(reverse=True)
print(*arr, sep='\n')
"""
[9, 6, 3]
[9, 2, 9]
[6, 3, 6]
[5, 7, 4]
[0, 10, 6]
[0, 6, 9]
"""
1番目の要素から基準にして、降順となっています。
arr = sorted(arr, reverse=True)
も同じ結果になります。
逆順 reverse()
2次元配列でもちゃんと逆順になります。
arr = [[0, 10, 6], [5, 7, 4], [9, 6, 3], [6, 3, 6], [9, 2, 9], [0, 6, 9]]
arr.reverse()
print(*arr, sep='\n')
"""
[0, 6, 9]
[9, 2, 9]
[6, 3, 6]
[9, 6, 3]
[5, 7, 4]
[0, 10, 6]
"""
arr = reversed(arr)
も同様。
keyを指定してソートする
lambdaを使うと指定した要素を基準にソートすることもできる。
2番目の要素を基準に昇順
引数keyにlambdaを使って要素を割り当てる。
arr = [[0, 10, 6], [5, 7, 4], [9, 6, 3], [6, 3, 6], [9, 2, 9], [0, 6, 9]]
# 2番目の要素で昇順
arr.sort(key=lambda x: x[1])
print(*arr, sep='\n')
"""
[9, 2, 9]
[6, 3, 6]
[9, 6, 3]
[0, 6, 9]
[5, 7, 4]
[0, 10, 6]
"""
このとき、1、3番目の要素は比較されない。 2番目の要素が同じ数値の時は、初期の並び順に依ります。
あわせてどうぞ
Python:ファイルダウンロードの進行状況とファイルサイズを表示する方法。urllib
Pythonschedule2024-02-27
【Python】tqdmでforの進捗状況を表示する
PythonColabolatoryschedule2021-02-16
学習済みの日本語単語ベクトルをColabolatoryで試してみる
自然言語処理PythonColabolatoryschedule2021-02-04
Unity ML-Agentsで新しく学習環境を作る
Unity機械学習C#PythonDeepLearningschedule2021-01-22
27. 内部リンクの除去
自然言語処理100本ノックPythonschedule2020-03-17