ソートされたコンテナーがPythonに追加されないようにするPython設計決定(PEP)はありますか?
(OrderedDict
挿入順に並べられているため、ソートされたコンテナーではありません。)
ソートされたコンテナーがPythonに追加されないようにするPython設計決定(PEP)はありますか?
(OrderedDict
挿入順に並べられているため、ソートされたコンテナーではありません。)
回答:
これはGuido側の意識的な設計上の決定です(彼はcollections
モジュールの追加に関していくらか気が進まなかった)。彼の目標は、アプリケーションのデータ型の選択に関して、「それを行うための1つの明白な方法」を維持することです。
基本的な概念は、組み込み型が問題の適切な解決策ではないことをユーザーが理解できるほど洗練されている場合、適切なサードパーティライブラリを見つけることもできるということです。
list + sorting、list + heapq、list + bisectが、本質的にソートされたデータ構造に依存する多くのユースケースをカバーし、blistのようなパッケージが存在することを考えると、このスペースをさらに複雑にする大きな推進力はありません。標準ライブラリ。
いくつかの点で、標準ライブラリに多次元配列がなく、代わりにそのタスクをNumPyの人々に譲るという事実に似ています。
collections.Counter
ソートされたセットとして使用できます。効率的ではないかもしれませんが。
collections.Counter
ソートされていないため、ソートされたセットを表すには適していません。
dict
はハッシュテーブルです。
ソートされたリスト、dict、およびセットタイプを実装するPythonのsortedcontainersモジュールもあります。これはblistと非常に似ていますが、純粋なPythonで実装されており、ほとんどの場合、より高速です。
>>> from sortedcontainers import SortedSet
>>> ss = SortedSet([3, 7, 2, 2])
>>> ss
SortedSet([2, 3, 7])
また、他のパッケージにはない機能もあります。
>>> from sortedcontainers import SortedDict
>>> sd = SortedDict((num, num) for num in range(100000))
>>> sd.iloc[-5] # Lookup the fifth-to-last key.
99995
免責事項:私はsortedcontainersモジュールの作成者です。
Pythonリストは順序付けられています。あなたがそれらを分類するならば、彼らはそのようにとどまります。Python 2.7ではOrderedDict
、明示的に順序付けられた辞書を維持するために型が追加されました。
Pythonにもセット(メンバーが一意である必要があるコレクション)がありますが、定義上、それらは順序付けられていません。セットをソートすると、が返されますlist
。