sortメソッドはリストを指定した順番にソートするメソッドです。またリストに限らずイテラブルをソートする関数としてsorted関数があります。今回はsortメソッドとsorted関数についてのべます。関数とメソッドの違いについては「【Python】関数とメソッドの違い」をみてください。
sortメソッドとは
sortメソッドはリストをソートするためのメソッドです。メソッドですのでリストのインスタンスから呼び出します。インスタンスというのはクラスを実体化(値が入っている状態)してあるものです。keyでソートに用いる関数を指定しますがこの値ななくても構いません。その場合には単純に要素値でソースされます。keyでソート関数を指定した場合には、リストの各要素を引数にしてソート関数を実行し、ソート関数の戻り値をソートした順番で各リストの要素を並び替えます(下図参照)。
メソッドですので、メソッドを呼び出したリストの値を直接並び替えます。
sortメソッドを用いたサンプル
sortメソッドがどのようなものかわかったところでsortメソッドを用いたサンプルをみてみます。
def get_area_cd(x:str):
if x=="北海道":
return "01"
elif x=="青森県":
return "02"
elif x=="岩手県":
return "03"
elif x=="宮城県":
return "04"
elif x=="秋田県":
return "05"
l=["宮城県","青森県","北海道","秋田県","岩手県"]
print("ソート前")
print(l)
l.sort(key=get_area_cd)
print("ソート後")
print(l)
県名を格納したリストがあります。これをsortメソッドでソートするのですが、keyを指定しないと単純に文字コード順に並ぶことになります。それでは面白くないため今回は都道府県名から都道府県コードを出力する関数get_area_cdを用意しました。これをkey関数に指定することで、リストは都道府県コード順にソートされます。
実行結果
ソート前 ['宮城県', '青森県', '北海道', '秋田県', '岩手県'] ソート後 ['北海道', '青森県', '岩手県', '宮城県', '秋田県']
sorted関数とは
sortメソッドと同じような動作をするものにsorted関数と呼ばれる関数があります。sortメソッドとの大きな違いは2点です。sortはメソッドでしたがsortedはメソッドではなく関数であること。次にsortはリストが処理対象ですがsortedはイテラブル(リスト、ディクショナリ、タブルなどなど)が処理の対象である点です。
sortedはメソッドでなく関数です。そのため第1引数でソート対象となるイテラブルを指定します。要素がそれぞれソート関数に引き渡されソート関数から戻ってきた結果を元にソートがおこなわれるのはsortメソッドと同じです。sortメソッドと違うのは引数となったイテラブルを直接ソートするのではなくsortedの戻り値としてソート結果が返っています。
引数に指定したイテラブルは元のままになっています。
sorted関数を用いたサンプル
実際にsorted関数を用いたサンプルが以下になります。分かりやすいようにsortメソッドと同じ処理をおこないようにしています。
def get_area_cd(x:str):
if x=="北海道":
return "01"
elif x=="青森県":
return "02"
elif x=="岩手県":
return "03"
elif x=="宮城県":
return "04"
elif x=="秋田県":
return "05"
li1=["宮城県","青森県","北海道","秋田県","岩手県"]
print("ソート前")
print(li1)
li2=sorted(li1,key=get_area_cd)
print("ソート結果")
print(li2)
print("")
print("元のイテラブル(変化なし)")
print(li1)
実行結果
ソート前 ['宮城県', '青森県', '北海道', '秋田県', '岩手県'] ソート結果 ['北海道', '青森県', '岩手県', '宮城県', '秋田県'] 元のイテラブル(変化なし) ['宮城県', '青森県', '北海道', '秋田県', '岩手県']
実行結果をみてみると元のイテラブルは変化がないことがわかるとおもいます。
まとめ
今回はソートについてみてみました。リストのメソッドであるsortメソッドと、イテラブル全体に適用できるsorted関数について説明しました。ソート処理は良く用いるロジックですのでしっかり使いこなせるようになってください。またこの後でてくるgroupby関数などイテラブルの結果をグループごとに集計するような場合にも前処理で必要になってきます。図をみてソート処理の呼び出し方をしっかり理解してもらえればと思います。
この記事へのコメント
コメントはまだありません。
コメントを送る