Python-Liste - "reservieren" - Raum ( ~ Größenänderung)
Ich bin eine Liste l
und ich möchte Belegung:
l[index] = val
Aber es könnte ein Fall, wenn die Liste ist zu klein.
So, ich will dafür sorgen, dass ich Platz für den neuen Wert ein.
Manchmal brauche ich zum füllen der neue Platz mit leeren Saiten ''
, und manchmal auch mit anderen Objekten (wie leere Listen []
, False
oder None
).
Für diese Aufgabe verwende ich folgende Prozedur:
def ResizeList(l, size, fill_with=None):
l += [fill_with]*(size-len(l))
(Hinweis: es funktioniert auch, wenn size-len(l)<=0
)
(Hinweis: ich bin daran interessiert, reservieren von Speicherplatz, ich absichtlich NICHT abgeschnitten es zu einer kürzeren Liste)
So:
ResizeList(l, index+1)
l[index] = val
(Bei Befüllung mit anderen Objekt, es ist wie : ResizeList(l, index+1, [])
)
Gibt es mehr pythonic weisen, dies zu tun? Gibt es built-ins oder die Bibliothek, die Funktionen für, dies zu tun?
Ich bin vor allem mit Python-3.x, aber know-how über die Python-2x ist hilfreich und willkommen.
Klarstellung: Bitte, Sag mir nicht, über dict
, Ursache ich brauche list
Für diejenigen, die möchte mich, um genauer zu sein:
Das problem Erklärung heißt es, es geht um list
geben. Mit dict
hier ist nicht eine option oder eine Lösung. Gibt es Gründe, insbesondere im Zusammenhang mit der domain (ich arbeite gerade an einem Prototyp für ein experiment, das zeigen einige asymptotische Verhalten, nicht - wie wahrscheinlich Sie es gewohnt sind - ein Prototyp-Programm. Wenn es wäre "nur ein Prototyp-Programm", dann Stimme ich mit ein dict und die anderen Kommentare). Ich habe die folgenden Annahmen:
- Ich habe viele, viele Listen (kümmern müssen Speicher-und performance-overhead)
- durch workflow und die Notwendigkeit der Prototyp, ich kann nicht rufen Sie ein handcodiert C/C++ - Erweiterung
- während der Berechnung der endgültigen Liste Größe ist unbekannt
- wir wissen, dass in die und die Listen werden dichten
- Liste sind die Zellen geschrieben und überschrieben in einer unbekannten Reihenfolge
Diese sind nur ein paar der Gründe, warum ich betonte, dass ich noch eine list
und nicht ein dict
.
Für diejenigen, die an mehr details interessiert oder wer würde gerne diskutieren über dict
, Kasse, wie wir diskutieren in den Kommentaren HIER
InformationsquelleAutor der Frage Grzegorz Wierzowiecki | 2012-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sicher sind, dass Sie eine Liste ist-und nicht, sagen wir, ein
dict
- ist die beste Datenstruktur für Ihren Fall ist, schlage ich die folgende Klasse:Diese Klasse prüft, ob der index zugeordnet ist, der über die aktuelle Länge der Liste, und automatisch erweitert die Liste wie erforderlich.
Der code ist kompatibel mit Python 2 und 3 (getestet mit 2.6.5 und 3.1.2).
Diese Klasse könnte nützlich sein, wenn die Struktur sehr dicht ist und Sie brauchen, um zu finden, die das element durch einen index, so schnell wie möglich. Wenn die Struktur ist spärlich, Sie sollten wahrscheinlich betrachten Sie mit einem Wörterbuch.
InformationsquelleAutor der Antwort NPE
Vielleicht das tut, was Sie wollen:
InformationsquelleAutor der Antwort Mischa Arefiev
Ich kam mit etwas, das verwendet
itertool.wiederholen()
.Haben das folgende Verhalten:
Macht diese Arbeit für Sie?
Edit: Da war die Frage aktualisiert, ich habe aktualisiert die Antwort.
InformationsquelleAutor der Antwort Rik Poggi
Versuchen Sie dies:
InformationsquelleAutor der Antwort Joel Cornett