Ich brauche ein listenähnliches Objekt, das sich "autogrown" lässt, wenn auf eine Slot-Nummer zugegriffen wird, die größer oder gleich der Länge ist, und alle neu erstellten Slots mit einem voreingestellten Standardwert gefüllt werden. Zum Beispiel:
%Vor%Danke!
PS. Ich weiß, dass es nicht schwierig ist, eine Klasse wie diese zu implementieren, aber ich vermeide Radneubildung so gut wie möglich, besonders wenn ein besonders effizientes / gut gestaltetes Rad bereits existiert.
PS2. Ein dict (oder ein collections.defaultdict) ist nicht eine akzeptable Implementierung der gewünschten Datenstruktur. Warum, siehe hier: Ссылка
Mit der Idee der Lösung von Wheaties und einer schöneren Schnittstelle:
Sie können von der Liste erben und die Methode ' getitem (index) überschreiben, die in Ihrer Klasse auf [index] verweist. Es sollte so etwas sein:
%Vor%Der gleiche Code kann verwendet werden, wenn Sie die Liste nicht erweitern, sondern nur einen Standardwert für den ungültigen Index
zurückgebenDadurch bleibt die gesamte Listenoberfläche erhalten.
(Dies ist keine neue Antwort; nur ein Kommentar zu unutbu. Es sollte wirklich möglich sein, solche Sachen in Kommentaren zu posten; es ist nicht so, also muss ich es als Antwort posten).
CombineListClasses
und CombineListClasses2
erben von zwei Klassen, die beide von list
erben. Das Verhalten und die Tests sind einfach, aber in der ursprünglichen Version schlecht.
Dies ist in Pythons Datenmodell Standard; Sie sollten fast nie direkt eine Basisklassenmethode aufrufen, anstatt über super
.
Beachten Sie, dass dies in Python 3 direkt von der Sprache unterstützt wird:
%Vor%Aber das wird in Python 2 nicht unterstützt. Ссылка