sorted([2, float('nan'), 1])
戻り値[2, nan, 1]
(少なくともActivestate Python 3.1の実装では。)
奇妙なオブジェクトだと理解しnan
ているので、ソート結果のランダムな場所に表示されても驚かないでしょう。しかし、それはまた、コンテナ内の非nan番号のソートを台無しにします。これは、実際には予想外のことです。
について関連する質問をmax
しましたが、それに基づいて、なぜsort
このように機能するのかを理解しています。しかし、これはバグと見なされるべきですか?
ドキュメントには、詳細を指定せずに「新しいソート済みリストを返す[...]」とだけ書かれています。
編集:これがIEEE標準に違反していないことに同意します。ただ、常識的にはバグだと思います。間違いを頻繁に認めることが知られていないMicrosoftでさえ、これをバグとして認識し、最新バージョンで修正しました:http: //connect.microsoft.com/VisualStudio/feedback/details/363379/bug- in-list-double-sort-in-list-which-contains-double-nan。
とにかく、私は@khachikの答えに従うことになりました:
sorted(list_, key = lambda x : float('-inf') if math.isnan(x) else x)
デフォルトでそれを実行している言語と比較して、パフォーマンスが低下する可能性がありますが、少なくとも機能します(私が導入したバグを除いて)。