Geschichte der Frage: Slicing gibt es in Python seit Anfang an als syntaktisch bequemen Weg, um Fragmente von Sequenzen zu erhalten, ohne manuelles Durchlaufen mit Schleifen.
Problem: Programmierer, die aus anderen Sprachen kommen, verwenden oft explizite Schleifen, um mit Teillisten zu arbeiten. Das erhöht den Umfang und verringert die Leistung des Codes.
Lösung: List Slicing ermöglicht es, Teile von Listen, Zeichenfolgen oder anderen Sequenzen kompakt, verständlich und effizient zu erhalten. Slices ändern das ursprüngliche Objekt nicht, sondern geben eine Kopie oder Ansicht (für einige Typen) zurück.
Beispielcode:
lst = [0, 1, 2, 3, 4, 5] sub = lst[1:4] # [1, 2, 3] reverse = lst[::-1] # [5, 4, 3, 2, 1, 0] every_second = lst[::2] # [0, 2, 4]
Wichtige Merkmale:
Hat die Änderung eines Wertes in einem Slice Auswirkungen auf die ursprüngliche Liste?
Nein: Wenn Sie einem Slice eine neue Liste zuweisen, ändern Sie die ursprüngliche Liste an diesen Positionen; aber beim Erhalten eines Slices erhalten Sie eine neue Liste.
Beispiel:
lst = [1, 2, 3, 4] lst2 = lst[1:3] # [2, 3] lst2[0] = 20 # Beeinflusst lst nicht: lst2 ist ein neues Objekt
Jedoch:
lst[1:3] = [7, 8] # das ändert lst direkt
Wie funktioniert ein Slice mit negativen Indexwerten?
Negative Indizes werden vom Ende gezählt: -1 ist das letzte Element, -2 ist das vorletzte. Zum Beispiel bedeutet lst[:-1], dass alle Elemente außer dem letzten betroffen sind.
Was passiert, wenn man beim Slicing über die Grenzen der Liste hinausgeht?
Python behandelt solche Fälle „intelligent“: Es gibt keinen Fehler, das Slice wird einfach an die verfügbaren Grenzen beschnitten. Zum Beispiel ergibt lst[100:200] eine leere Liste oder die maximal mögliche Teilliste.
Die Verarbeitung der Liste umfasst Hunderte von Zeilen mit verschachtelten Schleifen und Bedingungen zum "Zerschneiden" der Eingabedaten, der Code ist kompliziert und langsam.
Vorteile:
Nachteile:
Der gleiche Code wurde mit Slicing und eingebauten Funktionen umgeschrieben, benötigt weniger Zeilen und lässt sich leicht testen.
Vorteile:
Nachteile: