In der Programmierung mit Python ist die Manipulation von Listen eine der am häufigsten durchgeführten Aufgaben. Doch gerade Anfänger oder auch erfahrene Entwickler stoßen manchmal auf das Problem, dass sie einen Wert an einem spezifischen Index in eine komplett leere Liste einfügen möchten. Auf den ersten Blick scheint dies trivial, stellt sich bei genauerer Betrachtung jedoch als komplexer heraus, da Listen in Python keine Lücken oder "Holes" zulassen. In diesem Zusammenhang ist es spannend zu verstehen, wie Listen intern funktionieren und welche Lösungsansätze man verfolgen kann, um Werte genau an der gewünschten Stelle zu positionieren. Eine Python-Liste ist eine geordnete Sammlung von Elementen, die aneinanderhängend im Speicher verwaltet wird.
Anders als bei manchen Datenstrukturen, bei denen man freie Plätze überspringen kann, erwartet Python bei Listen, dass alle Positionen durch gültige Werte ausgefüllt sind. Das bedeutet, eine Liste mit Inhalt an Index 2 zu erstellen, wenn Index 0 und 1 leer sind, ist so nicht möglich, ohne diese vorher zu füllen. Wenn man also die Anweisung ausgeführt hat wie L = [] und anschließend L.insert(2, 177), reagiert Python nicht so, wie man es eventuell erwartet. Denn wenn die Liste leer ist, existieren keine Indizes 0 oder 1, und so wird die Methode insert(2, 177) in Wirklichkeit dazu führen, dass das Element hinten angehängt wird.
Das Ergebnis ist eine Liste mit einem Element an Index 0, nicht an Index 2. Dieses Verhalten liegt daran, dass Python bei der Verwendung von insert die Position nach vorne oder hinten berechnet – doch sie können keine Lücken zwischen Indizes erzeugen. Eine Liste wie [None, None, 177] ist zwar möglich, da die ersten beiden Plätze mit None gefüllt sind, das entspricht aber bereits einem expliziten Befüllen und ist nicht gleichbedeutend mit 'Leere Plätze' im herkömmlichen Sinne. Die Konsequenz daraus ist, dass Entwickler stets zunächst sicherstellen müssen, dass die Liste mindestens so lang ist, wie der gewünschte Einfügeindex. Erst dann kann man a n diesem Platz den Wert setzen.
Das Füllen der Zwischenplätze mit Platzhalterwerten wie None ist eine übliche Praxis. Beispielsweise erreicht man die gewünschte Struktur durch L = [None]*3; L[2] = 177. Dadurch entsteht eine Liste mit drei Elementen, wobei die ersten beiden Plätze mit None gefüllt sind, und am dritten Index der eigentliche Wert 177 steht. Dieses Vorgehen ist jedoch nicht immer ideal. Es kann den Code unübersichtlich machen, wenn die Liste viele Platzhalter enthält.
Außerdem kann die Verwendung von None als Platzhalter je nach Anwendungsfall problematisch sein, beispielsweise wenn None bereits als bedeutungsvoller Wert innerhalb der Logik genutzt wird. Eine elegante Alternative bietet der Einsatz von Python-Dictionaries. Ein Dictionary speichert Schlüssel-Wert-Paare und ermöglicht es, Werte unter beliebigen Schlüsseln zu speichern, auch wenn diese nicht sequentiell sind. So ist es problemlos möglich, einen Wert unter dem Schlüssel 2 zu speichern, ohne vorher andere Schlüssel mit Dummy-Werten zu belegen. Somit simuliert ein Dictionary die Möglichkeit, "Löcher" in der Datenstruktur zu haben, da keine fortlaufenden Schlüssel notwendig sind.
Der Wechsel von einer Liste zu einem Dictionary hängt jedoch vom Anwendungsfall ab. Wenn die Reihenfolge und die Indexposition einer Liste bedeutend sind, kann es sinnvoll sein, mit Platzhalterwerten zu arbeiten. Wenn jedoch die Position nur als Kennzeichnung dient und Reihenfolge keine Rolle spielt, bietet sich die Alternative Dictionary an. Für Programmierer, die dennoch mit Listen arbeiten und Werte an bestimmten Indizes einfügen wollen, existieren zudem verschiedene Hilfsmethoden. So kann beispielsweise eine Funktion entwickelt werden, die eine Liste automatisch auffüllt, bis sie die erforderliche Länge erreicht hat, um dann das gewünschte Element an genau dieser Stelle zu übergeben.