Einführung
Mit dem Datentyp String haben wir bereits ein Beispiel für einen sequentiellen Datentyp kennengelernt. Sequentiell bedeutet, dass der Inhalt durchnummeriert ist, was eben mit den Zeichen eines Strings der Fall ist. Neben diesem gibt es aber noch weitere sequentielle Datentypen, die wir nun betrachten wollen.
Listen
Während ein String nur Schriftzeichen enthalten kann, können in einer Liste beliebige Daten abgelegt werden. In unserem ersten Beispiel legen wir ein paar Zahlen ab:
erste_liste = [2, 3, 5, 7, 11] print(erste_liste) # Ausgabe: [2, 3, 5, 7, 11] print(erste_liste[0]) # Ausgabe: 2 print(erste_liste[4]) # Ausgabe: 11 print(len(erste_liste)) # Ausgabe: 5
Wie wir sehen, wird eine Liste durch eckige Klammern markiert. Die einzelnen Elemente der Liste werden jeweils durch ein Komma getrennt. Eine Liste können wir unmittelbar mit print
wieder ausgeben lassen.
Möchten wir auf ein einzelnen Element, können wir dies genau wie bei Strings, indem wir den Namen unserer Liste gefolgt von der Nummer des Elements in eckigen Klammern schreiben. Auch hier beginnt die Nummerierung bei Null. Mit len
erhalten wir die Länge der Liste.
Im Gegensatz zu Strings erlauben es Listen, einzelne Elemente zu ersetzen:
erste_liste = [2, 3, 5, 7, 11] erste_liste[4] = 9 print(erste_liste) # Ausgabe: [2, 3, 5, 7, 9]
Wir werden uns dies später noch einmal genauer ansehen, da es hier ein paar kniffelige Details gibt, die auf den ersten Blick vielleicht nicht auffallen.
Die gespeicherten Daten dürfen von verschiedenen Typen sein. Hier legen wir gleich Werte von vier verschiedenen Typen ab:
zweite_liste = [1.5, 'drei', 100, True] print(zweite_liste) # Ausgabe: [1.5, 'drei', 100, True]
Ein Liste darf sogar wieder Listen enthalten:
erste_liste = [2, 3, 5, 7, 11] erste_liste[4] = 9 zweite_liste = [1.5, 'drei', 100, True] dritte_liste = [erste_liste, zweite_liste, [1, 2, 3], 99.9] print(dritte_liste) # Ausgabe: [[2, 3, 5, 7, 9], [1.5, 'drei', 100, True], [1, 2, 3], 99.9] print(len(dritte_liste)) # Ausgabe: 4 print(dritte_liste[0]) # Ausgabe: [2, 3, 5, 7, 9] print(dritte_liste[0][0]) # Ausgabe: 2
Obwohl es auf den ersten Blick so scheint als enthalte dritte_liste
mehr als vier Elemente, ist die Länge tatsächlich nur Vier, da die enthaltenen Listen als jeweils ein Objekt zählen. Mit dritte_liste[0]
greifen wir auf die erste enthaltene Liste zu. Mit der zweiten eckigen Klammer können wir dann auf die verschiedenen Elemente dieser enthaltenen Liste zugreifen.
Tupel
Tupel sind Listen sehr ähnlich. Der entscheidende Unterschied ist, dass ein Tupel unveränderlich ist. Das bedeutet, dass die gespeicherten Werte
im Nachhinein nicht mehr verändert werden können. Eine Liste legt man im Gegensatz zu Listen mit runden Klammern an. Der Zugriff auf die Objekte funktioniert aber wieder über eckige Klammern:
erstes_tupel = (2, 3, 5, 7, 11) print(erstes_tupel) # Ausgabe: (2, 3, 5, 7, 11) print(erstes_tupel[0]) # Ausgabe: 2 print(erstes_tupel[4]) # Ausgabe: 11 print(len(erstes_tupel)) # Ausgabe: 5 zweites_tupel = (1.5, 'drei', 100, True) print(zweites_tupel) # Ausgabe: (1.5, 'drei', 100, True) drittes_tupel = (erstes_tupel, zweites_tupel, (1, 2, 3), 99.9) print(drittes_tupel) # Ausgabe: ((2, 3, 5, 7, 9), (1.5, 'drei', 100, True), (1, 2, 3), 99.9) print(len(drittes_tupel)) # Ausgabe: 4 print(drittes_tupel[0]) # Ausgabe: (2, 3, 5, 7, 9) print(drittes_tupel[0][0]) # Ausgabe: 2 erstes_tupel[4] = 9 print(erstes_tupel) # TypeError: 'tuple' object does not support item assignment
Mengen
Erzeugen von Mengen
Mengen in Python haben die Eigenschaften, die Mengen auch im mathematischen Sinn haben. D. h., ein Objekt kann höchstens einmal in einer Menge vorhanden sein und die enthaltenen Objekte besitzen keine festgelegte Reihenfolge.
Eine Menge wird anders als Listen oder Tupel nicht unmittelbar definiert, sondern mit der Funktion set
erzeugt:
erste_menge = set(["rot", "grün", "blau"]) zweite_menge = set(("schwarz", "rot", "gold")) dritte_menge = set(("weiß", "grau", "schwarz"))
Die Funktion set
erwartet als Parameter eine Liste, ein Tupel oder ein sonstiges Objekt, dessen Elemente durchlaufen werden können. In diesem Beispiel wurde die erste Menge durch Angabe einer Liste und die folgenden jeweils durch Angabe eines Tupels erstellt.
Einfache Funktionen
Die Anzahl der Elemente einer Liste erfahren wir mit len
. Mit in
prüfen wir, ob ein Objekt in einer Menge enthalten ist:
erste_menge = set(["rot", "grün", "blau"]) zweite_menge = set(("schwarz", "rot", "gold")) dritte_menge = set(("weiß", "grau", "schwarz")) print(len(erste_menge)) # Ausgabe: 3 print("rot" in erste_menge) # Ausgabe: True print("rot" in zweite_menge) # Ausgabe: True print("rot" in dritte_menge) # Ausgabe: False
Weitere Funktionen
Daneben sehen wir uns noch die folgenden vier einfachen Funktionen an:
Funktion | Zweck |
---|---|
copy() | Kopieren einer Menge |
add() | Hinzufügen eines Elements |
discard() | Entfernen eines Elements |
clear() | Leeren einer Menge |
Wie gewohnt ein Beispiel:
erste_menge = set(["rot", "grün", "blau"]) neue_menge = erste_menge.copy() print (neue_menge) # Ausgabe: {'rot', 'blau', 'grün'} neue_menge.add("gelb") print (neue_menge) # Ausgabe: {'rot', 'blau', 'gelb', 'grün'} neue_menge.discard("blau") print (neue_menge) # Ausgabe: {'rot', 'gelb', 'grün'} neue_menge.clear() print (neue_menge) # Ausgabe: set() print (erste_menge) # Ausgabe: {'rot', 'blau', 'grün'}
Wie wir an der letzten Ausgabe sehen, hat eine Veränderung an neue_menge
keinen Einfluss auf erste_menge
, weil wir neue_menge
mit der Methode copy()
erstellt haben.
Vergleichen von Mengen
Zum Vergleich zweier Mengen stehen uns vier Vergleichsoperatoren zur Verfügung:
Operator | Bedeutung |
---|---|
< | Teilmenge |
<= | echte Teilmenge |
> | Obermenge |
>= | echte Obermenge |
Betrachten wir ein Beispiel:
erste_menge = set(["rot", "grün", "blau"]) zweite_menge = set(("schwarz", "rot", "gold")) print(set(["rot", "grün"]) < erste_menge ) # Ausgabe: True print(set(["rot", "grün"]) < zweite_menge ) # Ausgabe: False print(set(["rot", "grün"]) <= erste_menge ) # Ausgabe: True print(set(["rot", "grün", "blau"]) < erste_menge ) # Ausgabe: False
Mengenoperationen
Die aus der Mathematik bekannten Mengenoperationen können wir wir folgt verwenden:
Operator | Bedeutung |
---|---|
| | Vereinigungsmenge |
& | Schnittmenge |
- | Differenzmenge |
^ | symmetrische Differenzmenge |
Auch dazu betrachten wir ein Beispiel:
erste_menge = set(["rot", "grün", "blau"]) zweite_menge = set(("schwarz", "rot", "gold")) print (erste_menge | zweite_menge) # Ausgabe: {'gold', 'rot', 'grün', 'blau', 'schwarz'} print (erste_menge & zweite_menge) # Ausgabe: {'rot'} print (erste_menge - zweite_menge) # Ausgabe: {'grün', 'blau'} print (erste_menge ^ zweite_menge) # Ausgabe: {'blau', 'grün', 'gold', 'schwarz'}
Frozenset
Wir wir gesehen haben, lassen sich Mengen im vielfältiger Weise manipulieren. Möchte man dies unterbinden, muss man eine sogenanntes Frozenset verwenden:
erste_menge = set(["rot", "grün", "blau"]) zweite_menge = frozenset(erste_menge) dritte_menge = frozenset(("blau", "gelb")) print (zweite_menge) # Ausgabe: frozenset({'grün', 'rot', 'blau'}) print (dritte_menge) # Ausgabe: frozenset({'blau', 'gelb'}) zweite_menge.add("lila") # AttributeError: 'frozenset' object has no attribute 'add'