Gibt es eine Python-Entwurfsentscheidung (PEP), die verhindert, dass ein sortierter Container zu Python hinzugefügt wird?
( OrderedDict
ist kein sortierter Behälter, da er nach Einfügereihenfolge sortiert ist.)
python
language-design
sortedset
sortedmap
Neil G.
quelle
quelle
Antworten:
Es ist eine bewusste Designentscheidung von Guido (er war sogar etwas zurückhaltend in Bezug auf das Hinzufügen des
collections
Moduls). Sein Ziel ist es, "einen offensichtlichen Weg zu finden", wenn es um die Auswahl von Datentypen für Anwendungen geht.Das Grundkonzept besteht darin, dass ein Benutzer, der hoch genug ist, um zu erkennen, dass die integrierten Typen nicht die richtige Lösung für sein Problem sind, auch die Aufgabe hat, eine geeignete Bibliothek eines Drittanbieters zu finden.
Angesichts der Tatsache, dass list + sorting, list + heapq und list + bisect viele der Anwendungsfälle abdecken, die ansonsten auf inhärent sortierten Datenstrukturen beruhen würden, und Pakete wie blist existieren, gibt es keinen großen Antrieb, um diesem Bereich mehr Komplexität zu verleihen die Standardbibliothek.
In gewisser Weise ähnelt es der Tatsache, dass die Standardbibliothek kein mehrdimensionales Array enthält, sondern diese Aufgabe an die NumPy-Leute abgibt.
quelle
collections.Counter
kann als sortierter Satz verwendet werden. Obwohl es möglicherweise nicht effizient ist.collections.Counter
ist unsortiert und nicht für die Darstellung einer sortierten Menge geeignet.dict
ist eine Hash-Tabelle.Es gibt auch ein Python- Modul für sortierte Container , das sortierte Listen-, Diktat- und Set-Typen implementiert. Es ist Blist sehr ähnlich, aber in reinem Python implementiert und in den meisten Fällen schneller .
>>> from sortedcontainers import SortedSet >>> ss = SortedSet([3, 7, 2, 2]) >>> ss SortedSet([2, 3, 7])
Es hat auch Funktionen, die für andere Pakete ungewöhnlich sind:
>>> from sortedcontainers import SortedDict >>> sd = SortedDict((num, num) for num in range(100000)) >>> sd.iloc[-5] # Lookup the fifth-to-last key. 99995
Haftungsausschluss: Ich bin der Autor des Moduls sortierte Container.
quelle
Es gibt auch das Blist- Modul, das einen sortierten Datentyp enthält :
sortedset(iterable=(), key=None) >>> from blist import sortedset >>> my_set = sortedset([3,7,2,2]) sortedset([2, 3, 7]
quelle
Nicht gerade ein "sortierter Container", aber Sie könnten an dem Halbierungsmodul der Standardbibliothek interessiert sein , das "Unterstützung für die Verwaltung einer Liste in sortierter Reihenfolge bietet, ohne die Liste nach jedem Einfügen sortieren zu müssen".
quelle
Es gibt eine
heapq
in der Standardbibliothek, sie ist nicht genau sortiert, aber irgendwie. Es gibt auch ein Blist- Paket, das sich jedoch nicht in der Standardbibliothek befindet.quelle
Python-Listen sind geordnet. Wenn Sie sie sortieren, bleiben sie so. In Python 2.7 wurde ein
OrderedDict
Typ hinzugefügt, um ein explizit geordnetes Wörterbuch zu verwalten.Python hat auch Mengen (eine Sammlung, in der die Mitglieder eindeutig sein müssen), aber per Definition sind sie ungeordnet. Das Sortieren eines Satzes gibt nur a zurück
list
.quelle