93

ソートされたコンテナーがPythonに追加されないようにするPython設計決定(PEP)はありますか?

OrderedDict挿入順に並べられているため、ソートされたコンテナーではありません。)

4

6 に答える 6

92

ソートされたリスト、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モジュールの作成者です。

于 2014-03-21T19:04:15.520 に答える
88

collectionsこれはGuido側の意識的な設計上の決定です(彼はモジュールの追加に関していくらか気が進まなかった)。彼の目標は、アプリケーションのデータ型の選択に関して、「それを行うための1つの明白な方法」を維持することです。

基本的な概念は、ユーザーが組み込み型が問題の適切な解決策ではないことを理解するのに十分な知識を持っている場合、適切なサードパーティライブラリを見つけることもできるということです。

list + sorting、list + heapq、list + bisectが、本質的にソートされたデータ構造に依存するユースケースの多くをカバーし、blistのようなパッケージが存在することを考えると、このスペースをさらに複雑にする大きな推進力はありません。標準ライブラリ。

いくつかの点で、それは標準ライブラリに多次元配列がなく、代わりにそのタスクをNumPyの人々に譲るという事実に似ています。

于 2011-05-11T03:39:17.600 に答える
12

ソートされたセットのデータ型を含むblistモジュールもあります。

sortedset(iterable=(), key=None)

>>> from blist import sortedset
>>> my_set = sortedset([3,7,2,2])
sortedset([2, 3, 7]
于 2012-05-30T10:10:48.627 に答える
6

正確には「ソートされたコンテナ」ではありませんが、「挿入のたびにリストをソートしなくても、ソートされた順序でリストを維持するためのサポートを提供する」標準ライブラリのバイセクトモジュールに興味があるかもしれません。

于 2012-05-30T13:48:27.997 に答える
3

標準ライブラリにはがありますが、heapq正確にソートされているわけではありませんが、一種です。blistパッケージもありますが、標準ライブラリにはありません。

于 2011-05-10T16:47:58.363 に答える
-5

Pythonリストは順序付けられています。あなたがそれらを分類する場合、それらはそのようにとどまります。Python 2.7ではOrderedDict、明示的に順序付けられた辞書を維持するために型が追加されました。

Pythonにもセット(メンバーが一意である必要があるコレクション)がありますが、定義上、それらは順序付けられていません。セットをソートすると、が返されますlist

于 2011-05-10T16:56:37.500 に答える