Sorted Containers 是一個 Apache2 授權的排序集合函式庫,用純 Python 寫,速度與 C 擴充一樣快。
Python 的標準函式庫非常有用,直到您需要排序的集合類型。許多人會證明,沒有一個你可以走得很遠,但是當你真正需要一個排序列表、排序字典或排序集時,你將面臨十幾種不同的實現,其中大多數使用C 擴展,沒有很好的文檔和基準測試。
在Python中,我們可以做得更好。我們可以用純 Python 來完成!
> >> from sortedcontainers import SortedList
> >> sl = SortedList ([ 'e' , 'a' , 'c' , 'd' , 'b' ])
> >> sl
SortedList ([ 'a' , 'b' , 'c' , 'd' , 'e' ])
> >> sl *= 10_000_000
> >> sl . count ( 'c' )
10000000
> >> sl [ - 3 :]
[ 'e' , 'e' , 'e' ]
> >> from sortedcontainers import SortedDict
> >> sd = SortedDict ({ 'c' : - 3 , 'a' : 1 , 'b' : 2 })
> >> sd
SortedDict ({ 'a' : 1 , 'b' : 2 , 'c' : - 3 })
> >> sd . popitem ( index = - 1 )
( 'c' , - 3 )
> >> from sortedcontainers import SortedSet
> >> ss = SortedSet ( 'abracadabra' )
> >> ss
SortedSet ([ 'a' , 'b' , 'c' , 'd' , 'r' ])
> >> ss . bisect_left ( 'c' )
2
上面顯示的所有操作的運行速度都快於線性時間。上面的演示還需要近 GB 的記憶體才能運行。當排序列表乘以一千萬時,它儲存對“a”到“e”中每一個的一千萬個引用。每個引用在排序容器中需要八個位元組。這是很難擊敗的,因為它是指向每個物件的指標的成本。與典型的二元樹實作(例如紅黑樹、AVL-Tree、AA-Tree、Splay-Tree、Treap 等)相比,它的開銷也減少了66%,因為典型的二元樹實現的每個節點也必須存儲兩個指向子節點的指標。
Sorted Containers 承擔了 Python 排序集合中的所有工作 - 讓您輕鬆部署和使用 Python。無需安裝 C 編譯器或預先建置和分發自訂擴充功能。性能是一項功能,測試通過單元測試和壓力時間達到 100% 的覆蓋率。
Alex Martelli ,Python 軟體基金會研究員
“好東西!…我喜歡這種簡單、有效的實現思路,即將排序的容器分割成更小的“片段”,以避免 O(N) 插入成本。”
Jeff Knupp ,《Writing Idiomatic Python》和《Python Trainer》的作者
“最後一部分,‘像 C 擴展一樣快’,令人難以置信。我需要某種性能比較來確信這是真的。作者將其包含在文檔中。確實如此。”
Kevin Samuel ,Python 和 Django 培訓師
我非常驚訝,不僅是程式碼品質(它的可讀性非常好,而且比程式碼有更多的註釋,哇),還有你在程式碼以外的東西上投入的實際工作量:文件、基準測試、實現解釋。甚至 git 日誌也是乾淨的,單元測試在 Python 2 和 3 上開箱即用。
Mark Summerfield ,Python 排序集合的簡短請求
Python 的「包含電池」標準庫似乎缺少電池。而「我們以前從未有過這樣的經驗」的論點已經變得不那麼重要了。 Python 是時候提供一整套開箱即用的集合類別了,包括排序的集合類別。
Sorted Containers 用於流行的開源項目,例如:Zipline,Quantopian 的演算法交易庫; Angr,加州大學聖塔芭芭拉分校的二元分析平台; Trio,一個非同步 I/O 函式庫; Dask Distributed,一個由 Continuum Analytics 支援的分散式計算庫。
使用 pip 安裝 Sorted Containers 很簡單:
$ pip 安裝sortedcontainers
您可以使用 Python 的內建幫助功能存取解釋器中的文件。此說明適用於排序容器中的模組、類別和方法。
> >> import sortedcontainers
> >> help ( sortedcontainers )
> >> from sortedcontainers import SortedDict
> >> help ( SortedDict )
> >> help ( SortedDict . popitem )
有關排序容器的完整文檔,請造訪 http://www.grantjenks.com/docs/sortedcontainers/
使用者指南提供了排序容器的介紹以及廣泛的效能比較和分析。
本社區指南提供了有關 Sorted Containers 開發的資訊以及支援、實施和歷史詳細資訊。
API 文件提供了有關 Sorted Containers 套件中的特定函數、類別和模組的資訊。
版權所有 2014-2024 格蘭特詹克斯
根據 Apache 許可證 2.0 版(“許可證”)獲得許可;除非遵守許可證,否則您不得使用此文件。您可以在以下位置取得許可證副本:
http://www.apache.org/licenses/LICENSE-2.0
除非適用法律要求或書面同意,否則根據許可證分發的軟體均以「原樣」分發,不帶任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。