ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

Pythonにおける二次元配列のソート

Pythonで二次元配列をソートのすることがあり、その内容をまとめます。

二次元配列に対して昇順と降順のsortを試していきます。
特定の要素(例では2番目の要素)に対するソートも確認していきます。

二次元配列のソート

昇順 sort()

array = [[2, 3, 4], [1, 3, 2], [4, 1, 3], [1, 2, 3]]

array.sort()

print(array)

#[[1, 2, 3], 
# [1, 3, 2], 
# [2, 3, 4], 
# [4, 1, 3]]

二次元配列にsort関数を使用した場合、最初の要素から順にソートされます。
1つ目の要素が同じ場合は2つ目の要素でソートされます。

降順 sort(reverse = True)

array = [[2, 3, 4], [1, 3, 2], [4, 1, 3], [1, 2, 3]]

array.sort(reverse=True)

print(array)

# [[4, 1, 3],
#  [2, 3, 4],
#  [1, 3, 2],
#  [1, 2, 3]]

二次元配列を降順でソートした場合も最初の要素から降順でソートされます。
同じく1つ目の要素が同じ場合は2つ目の要素でリストの順番が変更されます。


特定の要素(2番目の要素)でソート

昇順 sort() :lambda関数

array = [[2, 3, 4], [1, 3, 2], [4, 1, 3], [1, 2, 3]]

array.sort(key=lambda x: x[1]) 

print(array)

# [[4, 1, 3],
#  [1, 2, 3],
#  [2, 3, 4],
#  [1, 3, 2]]

引数keyにlambda関数を渡すことで比較する要素を指定できます。
この例ではリストの要素の2番目の値で比較してソートされています。
この場合、比較している要素が同じ場合はソート前の順番に影響されます。

降順 sort(reverse = True) :lambda関数

array = [[2, 3, 4], [1, 3, 2], [4, 1, 3], [1, 2, 3]]

array.sort(key=lambda x: x[1], reverse=True) 

print(array)

#[[2, 3, 4], 
# [1, 3, 2], 
# [1, 2, 3], 
# [4, 1, 3]]

reverseを使うことで降順にソートされます。
こちらも同様に比較した要素が同じときは元のリストの順番に影響されます。

昇順 sort() :operatorモジュール

import operator

array = [[2, 3, 4], [1, 3, 2], [4, 1, 3], [1, 2, 3]]

array.sort(key=operator.itemgetter(1)) 

print(array)

#[[4, 1, 3], 
# [1, 2, 3], 
# [2, 3, 4], 
# [1, 3, 2]]

特定の要素のソートはoperatorモジュールのitemgetter()を使用してもできます。
operator.itemgetter(1)をkeyに渡すことで各リストの2番目の要素でソートできます。
こちらも2番目以外の要素の順番は初期のリストの順番によって変わります。

降順 sort(reverse = True) :operatorモジュール

import operator

array = [[2, 3, 4], [1, 3, 2], [4, 1, 3], [1, 2, 3]]

array.sort(key=operator.itemgetter(1),reverse=True) 

print(array)

# [2, 3, 4], 
# [1, 3, 2], 
# [1, 2, 3], 
# [4, 1, 3]]

同じくreverseを使用して降順でもソートできます。



ソートの方法によってそのほかの要素の並びが変わったりするので、しっかり使い方を覚えていきたいです。