Autogrowing-Liste in Python?

9

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: Ссылка

    
kjo 28.02.2011, 19:14
quelle

5 Antworten

3
%Vor%     
unutbu 28.02.2011, 19:50
quelle
1

Ich würde eine spärliche Datenstruktur (1xn-Matrix) verwenden.

    
SiggyF 28.02.2011 19:21
quelle
1

Sie könnten immer eine Funktion erstellen, die dies behandelt:

%Vor%

Was zwar keine Datenstruktur ist, erfüllt jedoch, was Sie wollen.

    
wheaties 28.02.2011 19:35
quelle
0

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ückgeben

Dadurch bleibt die gesamte Listenoberfläche erhalten.

    
nvloff 28.02.2011 19:44
quelle
0

(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 .

%Vor%

Beachten Sie, dass dies in Python 3 direkt von der Sprache unterstützt wird:

%Vor%

Aber das wird in Python 2 nicht unterstützt. Ссылка

    
Glenn Maynard 28.02.2011 22:23
quelle

Tags und Links