リストのソート方法

リストLのソートは以下の3通りで全て解決可能。ここで、値はリストの要素を表し、キーはソートの比較対象を表す。

  1. 値そのものがキーとなる場合
    • そのままソート可能 => L.sort()もしくは、sorted(L)
  2. 値の中にキーが含まれている場合
    • キーワード引数keyを使用 => L.sort(key=foo)もしくは、sorted(L, key=foo)
    • ここで、fooは値を引数としてキーを返す関数。operator.itemgetter、operator.attrgetter、lambda式などを使う。
  3. 値の中にキーが含まれていない場合
    • DSUを使用 => [(key1, value1), (key2, value2), ...]を作り(Decorate)、ソートして、Undecorate
    • stableにソートしたい場合は、keyをタプルにして最後の要素にindex番号を入れる => [((k1, 0), value1), ((k2, 1), value2), ...]
    • キーが複数ある場合もkeyをタプルにしてキーの優先順に並べておく。