Python でリスト項目をその場で並べ替えて項目を並べ替える

Python ソート リストは、デフォルトの順序またはカスタム キーを使用してリストを適切な位置に配置します。 後で使用するためにロジックに一致するようにリストを並べ替える必要がある場合に使用します。 重要!インプレース並べ替えでは、新しいリストを作成するのではなく、元のリストが更新されます。

インプレース注文の Python ソート リストの例

出力:

ここに出力が表示されます...

出力:

['Ana', 'Mia', 'Zoe']

この例の仕組み

  1. names は、データの到着方法と一致する未ソートの順序で開始します。
  2. names.sort() は同じリストを所定の位置に並べ替えるので、後で使用するたびに新しい順序が表示されます。
  3. 出力には、アルファベット順にソートされたリストが表示されます。

よくある間違い

間違い 1: sort() が新しいリストを返すことを期待しています。

scores = [88, 92, 75]
new_scores = scores.sort()
print(new_scores)
scores = [88, 92, 75]
scores.sort()
print(scores)

理由: list.sort() は、既存のリストを変更するため、常に None を返します。

間違い 2: Python 3 で混合型を並べ替える。

items = [3, "10", 2]
items.sort()
items = ["3", "10", "2"]
items.sort(key=int)
print(items)

この問題が発生する理由: 数値と文字列は直接比較できないため、型を正規化するかキーを指定する必要があります。

間違い 3: 文字列の並べ替えでは大文字と小文字が区別されることを忘れています。

names = ["ana", "Mia", "zoe"]
names.sort()
print(names)
names = ["ana", "Mia", "zoe"]
names.sort(key=str.lower)
print(names)

この問題が発生する理由: デフォルトでは、大文字は小文字よりも前にソートされるため、名前の順序が正しくないように感じられる場合があります。

ソートリストとソート: どちらを使用するか

次の場合には list.sort() を使用してください…次の場合には sorted() を使用してください…
すでにリストがあり、それを適切な位置に並べ替えたいと考えています。新しいリストが必要で、元の順序をそのまま保持したいと考えています。
最もメモリ効率の高いオプションが必要です。単なるリストではなく、あらゆる反復可能オブジェクトをソートしています。
None を返すメソッドで問題ありません。並べ替えられたデータを新しい値として取得したいとします。

経験則: 同じリストが変更される必要がある場合は、list.sort() に手を伸ばします。別の並べ替え結果が必要な場合は、sorted() を使用します。

パフォーマンスに関する考慮事項

list.sort() は、新しいリストを割り当てるのではなく、既存のリストを再配置するため、メモリに優しいです。元の順序が必要ない場合は、通常、これが最も高速でメモリ効率の高いオプションです。 key 関数は項目ごとに 1 回呼び出されるため、大きなリストの場合は関数を単純にしてください。元のリストを変更しない必要がある場合、sorted() はその安全性と引き換えに追加のメモリを使用します。

リストを並べ替えるためのその他のパタ​​ーン

長さなどの派生キーによって並べ替えます。

labels = ["box", "container", "bin"]
labels.sort(key=len)
print(labels)

これは、表示ルールがアルファベット順ではなく、サイズによる明確な順序が必要な場合に便利です。 カスタム ルールを適用している間、リストは所定の位置に保持されます。

リーダーボードを降順に並べ替えます。

scores = [88, 92, 75]
scores.sort(reverse=True)
print(scores)

上位 N 表示では降順が一般的で、reverse=True によりコードが単純になります。 リストは依然としてその場で、逆方向にソートされています。

Python ソートリストを使用する場合

  • 後で複数の場所で再利用されるリストを並べ替えます。
  • 2 番目のリストの作成を回避して、メモリ使用量を低く抑えます。
  • 自然な順序が必要でない場合は、key 関数を適用します。
  • 元の順序を保存する必要がある場合は避けてください。 sorted() を使用するか、最初にリストをコピーしてください。
  • リスト以外の反復可能オブジェクトについては、明示的にリストに変換しない限り、これを避けてください。