113

ドキュメントはそれを保証しません。それが文書化されている他の場所はありますか?

リストの sort メソッドは安定していることが保証されているため(Notes 9 番目のポイント:「Python 2.3 以降、sort() メソッドは安定していることが保証されています」)、sorted は機能的に類似しているため、安定している可能性があると思います。しかし、私はそう言っている決定的な情報源を見つけることができません。

目的: 主キーが両方のレコードで等しい場合、主キーと副キーに基づいて並べ替える必要があります。sorted() が安定していることが保証されている場合、2 次キーでソートしてから、1 次キーでソートして、必要な結果を得ることができます。

PS: 混乱を避けるために、「等しい要素の相対的な順序を変更しないことが保証されている場合、並べ替えは安定している」という意味で安定を使用しています。

4

5 に答える 5

144

はい、マニュアルの意図は、それsortedが安定しており、実際にメソッドとまったく同じアルゴリズムを使用していることを保証することですsort。私は、ドキュメントがこの身元について 100% 明確ではないことを認識しています。doc パッチはいつでも喜んで受け入れられます!

于 2009-12-16T15:36:08.290 に答える
35

それらは安定しています。

ところで、マルチパスソートとシングルパスソートを組み合わせることで、 sort と sorted が安定しているかどうかを知ることを無視できる場合があります。

たとえばlast_namefirst_name属性に基づいてオブジェクトを並べ替えたい場合は、1 回のパスで実行できます。

sorted_list= sorted(
    your_sequence_of_items,
    key= lambda item: (item.last_name, item.first_name))

タプル比較を利用します。

この回答はそのままで、元の質問をカバーしています。並べ替えに関するその他の質問については、Python Sorting How-Toがあります。

于 2009-12-28T22:42:14.623 に答える
0

Python 2.4の「What's New」ドキュメントでは、sorted() が最初にリストを作成し、次にそれに対して sort() を呼び出すことを効果的に指摘しています。これにより、「公式」ドキュメントではなくても、必要な保証が提供されます。本当に心配なら、ソースを確認することもできます。

于 2009-12-16T15:38:39.683 に答える