2021年9月20日月曜日

【リスト】リストのソート

 リストをコピーする場合、そのやり方によってコピー元・先のオブジェクトが束縛される場合と別のオブジェクトとなる場合があり注意が必要。代入演算子で複製すると参照渡しとなり同じメモリ領域を参照するためコピー先のオブジェクトがコピー元のオブジェクトの値に影響される。コピー先のオブジェクトをコピー元のオブジェクトとリンクさせたくない場合はcopy()メソッドやcopyモジュールを使う、スライスによりコピーする等が必要となる。


1. list.sort()による昇順のソート

 リスト型のsortメソッドを用いるとリストがソートされる。デフォルトでは昇順(小さい順)のソートとなる。元のリストそのものがソートされる。

a = [4, 7, 2, 9]
a.sort()
print(a)

実行結果

[2, 4, 7, 9]


2. list.sort()による降順のソート(reverse=True)

 sortメソッドの引数reverse=Trueとすると降順(大きい順)にソートされる。

a = [4, 7, 2, 9]
a.sort(reverse=True)
print(a)

実行結果

[9, 7, 4, 2]


3. list.sort()によるkeyを用いた二次元リストのソート

 二次元リストにおいていずれかの要素によるソートを行う場合は引数keyによりソートに用いる要素を無名関数lambdaとインデックスで指定する。

population = [[1404, '東京'], [528, '北海道'], [146, '沖縄'], [882, '大阪'], ]
population.sort(key=lambda population: population[0])
print(population)

実行結果

[[146, '沖縄'], [528, '北海道'], [882, '大阪'], [1404, '東京']]


4. sorted()による昇順のソート

sorted()関数を用いると元のリストを保持しソートされた新しいリストが生成される。sorted()関数はリストに限らずソートできる。

a = [4, 7, 2, 9]
sorted(a)

実行結果

[2, 4, 7, 9]


sorted()関数では元のリストは変更されない

a = [4, 7, 2, 9]
sorted(a)
a

実行結果

[4, 7, 2, 9]


5. sorted()による降順のソート(reverse=True)

 list.sortメソッド同様にsorted()関数でも引数reverse=Trueとすると降順にソートされる。

a = [4, 7, 2, 9]
print(sorted(a, reverse=True))

実行結果

[9, 7, 4, 2]


6. sorted()によるkeyを用いた二次元リストのソート

 list.sortメソッド同様にsorted()関数でも、二次元リストにおいていずれかの要素によるソートを行う場合は引数keyによりソートに用いる要素を無名関数lambdaとインデックスで指定する。

population = [[1404, '東京'], [528, '北海道'], [146, '沖縄'], [882, '大阪'], ]
print(sorted(population, key=lambda population: 
                                population[0]))

実行結果

[[146, '沖縄'], [528, '北海道'], [882, '大阪'], [1404, '東京']]


7. リファレンス

Python 標準ライブラリ > 組み込み型 > リスト型 (list) > sort(*, key=None, reverse=False)
Python Documentation > Python HOWTO > ソート HOW TO

使用バージョン:Python 3.8.8

0 件のコメント:

コメントを投稿