Auf deiner Einkaufsliste für den Supermarkt befinden sich (hoffentlich) alle Lebensmittel, die du in der nächsten Zeit benötigen wirst. In Python kann eine solche Sammlung von Objekten als Liste gespeichert werden.
Challenge
Schreibe ein Programm, dass aus einer Liste von Zahlen, zum Beispiel der Liste a = [1, 4, 9, 16, 25]
das erste und das letzte Element in eine neue Liste kopiert.
Gut zu wissen…
Listen können ganz unterschiedliche Bestandteile enthalten, beispielsweise Integer, Strings oder auch weitere Listen. Die Bestandteile einer Liste werden in eckigen Klammern, mit Komma separiert, notiert. Eine eckige Klammer ohne Inhalt ist eine leere Liste. Beispiele für Listen:
1 2 3 4 5 6 7 8 |
# Liste aus der Challenge a = [1, 4, 9, 16, 25] # Liste mit Farben farben = ['blau', 'gelb', 'gruen', 'schwarz'] # Liste mit unterschiedlichen Objekten (Buchname, Jahreszahl, Bewertung, # Seitenzahl buchliste = ['Kalle Blomquist', '1946', 4.6, 448] # leere Liste liste = [] |
Genau wie bei dem Datentyp String lassen sich einzelne Elemente einer Liste mit Hilfe von [ ] und einem Index ansprechen. Das erste Element wird mit dem Index 0 aufgerufen. Das letzte Element lässt sich über den Index -1 ansprechen. Mehrere (zusammenhängende) Elemente lassen sich mit Hilfe von my_list[start:end] extrahieren.
1 2 3 |
# Gebe das erste und dritte Element aus print(farben[0], farben[2]) # blau, gruen print(farben[0:1]) # blau, gelb |
Kopieren von Listen
Bei der Zuweisung (=) einer Liste zu einer anderen Liste wird keine Kopie der Liste erstellt, sondern es zeigen beide Listenvariablen auf dieselbe Liste im Speicher. Was bedeutet das? Wird nun eine Liste geändert, so gilt die Änderung auch für die andere Liste, da beide Listen ja auf dieselbe abgespeicherte Liste verweisen. Nur wenn einer Liste eine komplett neue Liste zugewiesen wird, können die Zeiger wieder auf unterschiedliche Listen im Speicher verweisen.
1 2 3 4 5 6 7 8 9 |
list1 = ['Amsel', 'Blaumeise'] list2 = list1 list2[1] = 'Zaunkönig' # Da beide Listen auf die gleiche Liste im Speicher zeigen... print(list1) # Amsel, Zaunkönig list2 = ['Gimpel', 'Kleiber'] print(list1) # Amsel, Zaunkönig print(list2) # Gimpel, Kleiber |
Möchte man eine Liste mit ihren Elementen duplizieren (shallow copying), dann kann die Funktion copy() aus dem Modul copy verwendet werden. Alternativ kann eine solche Kopie auch durch die Verwendung des Slicing Operators : angelegt werden, in dem die komplette Liste ausgewählt wird ([:])
1 2 3 4 5 6 7 8 9 |
# Kopieren mit Copy Modul import copy list1 = ['Amsel', 'Blaumeise'] list2 = list1.copy() list2[1] = 'Gimpel' print(list1) # Amsel, Blaumeise print(list2) # Amsel, Gimpel # Das selbe Ergebnis erhält man beim Kopieren mit Hilfe des Slicing Operators list2 = list1[:] |
Erweitern von Listen
Listen können durch das + zeichen (genau wie Strings) miteinander verbunden werden.
1 2 3 |
x = [1,2,3] y = [4,5] z = x + y # [1,2,3,4,5] |
Es gibt auch zwei Methoden, die das Hinzufügen von Elementen ermöglichen: append() und extend(). Was ist ihr Unterschied? Bei der append() Methode wird ein Element (item) an das Ende einer Liste gehängt. Dies kann ein einzelnes Element sein (z.B. ein Integer) oder auch ein zusammengesetzter Datentyp, z.B. eine Liste. Wird eine Liste hinzugefügt, wird diese auch als Liste abgespeichert.
1 2 3 4 5 6 7 |
# append() Methode x = [1,2,3] x.append(4) print(x) # [1,2,3,4] y = [5,6] x.append(y) print(x) # [1,2,3,4,[5,6]] |
Bei der extend() Methode ist der erwartete Parameter eine Liste. Die Elemente dieser Liste werden einzeln an die bestehende Liste angehängt.
1 2 3 4 |
x = [1,2,3] y = [4,5] x.extend(y) print(x) [1,2,3,4,5] |
Löschen von Listen oder Listenelementen
Auch zum Löschen von Listen oder Elementen in Listen gibt es verschiedene Methoden. Mit dem Schlüsselwort del kann eine komplette Liste oder Elemente in dieser Liste gelöscht werdenMit clear() kann eine Liste geleert werden.
1 2 3 4 5 6 7 8 9 10 11 12 |
x = [1,2,3,4,5,6,7] # komplette Liste gelöscht del x print(x) # NameError: name 'x' is not defined x = [1,2,3,4,5,6,7] x.clear() print(x) # x = [1,2,3,4,5,6,7] del x[1] print(x) # [1,3,4,5,6,7] del x[1:3] print(x) # [1,5,6,7] |
Mit remove(element) kann ein bestimmtes Element in der Liste gelöscht werden.Mit pop() wird das letzte Element einer Liste entfernt, mit pop(index) das Element das am Listeneintrag mit dem angegebenen Index steht.
1 2 3 4 5 |
x = [1,2,3,4,5,6,7] x.remove(5) print(x) # [1,2,3,4,6,7] print(x.pop()) # 7 print(x.pop(1)) # 2 |