-
Notifications
You must be signed in to change notification settings - Fork 1
04 Collections
Ein Hauptzweck von Programmierung ist es, wiederkehrende Aufgaben automatisiert ausführen. Dazu ist es nützlich, wenn wir diese Aufgaben zuerst auflisten und dann der Reihe nach abarbeiten.
Eine Liste (array
oder list
) ist immer mit zwei eckigen Klammern gekennzeichnet. Sie kann eine beliebige Anzahl an Einträgen (elements) enthalten, die sich dynamisch verändern lassen.
woche = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag']
Auch für Listen gibt es zahlreiche mögliche Operationen. In der Liste woche
fehlen der Samstag und der Sonntag. Im Beispiel sehen wir dies sofort, doch in einem grösseren Skript ist es manchmal sinnvoll zu prüfen, ob ein bestimmtes Element in einem Array vorhanden ist:
'Sonntag' in woche
Wir fügen das Wochenende noch hinzu:
woche.append('Samstag')
woche.append('Sonntag')
Ein Eintrag in einer Liste kann auch direkt angesprochen werden, wenn wir seine Position (Index) innerhalb der Liste kennen. Der Mittwoch ist der dritte Wochentag, deshalb steht er an dritter Stelle.
Da in Programmiersprachen die Nummerierung nicht bei eins, sondern bei null beginnt, hat der Mittwoch den Index 2.
woche[2]
Natürlich lassen sich Listen auch sortieren. Wir überschreiben die Variable woche mit einer sortierten Liste der Wochentage.
woche = sorted(woche)
An Indexposition 2 steht nun nicht mehr der Mittwoch, sondern der Freitag. Aus einer Liste entfernt werden könne Einträge über ihre Indexposition oder über ihren Wert:
woche.pop(2) # entfernt den Eintrag mit Index 2, also den Freitag
woche.remove('Mittwoch') # entfernt den Mittwoch
Jeder Text (string) ist gleichzeitig eine Liste seiner einzelnen Buchstaben. Dies wird deutlich, wenn wir versuchen ein einzelnes Wort zu sortieren:
lt = sorted('swisstopo')
Manchmal gibt es Situationen, in denen man beispielsweise den letzten Eintrag in einer Liste wissen möchte. Hierzu kann man negative Indizes verwenden. Der Index -1 gibt den letzten Eintrag einer Liste zurück. -2 würde den zweitletzten Eintrag zurückgeben, usw.:
einkaufsliste = ['Eier', 'Mehl', 'Butter', 'Backpulver', 'Zucker', 'Ruebli', 'Milch']
einkaufsliste[-1]
einkaufsliste[-2]
Es ist auch möglich, bestimmte Ausschnitte aus einer Liste (Range) abzufragen. Wenn man zum Beispiel von der obigen Einkaufsliste die Einträge von zweiter bis vierter Stelle wissen möchte, dann kann man diese so abfragen:
einkaufsliste[1:5]
Weil das erste Element der Liste den Index 0 hat, ist das zweite im obigen Beispiel also unter dem Index 1 zu finden. Bei einer Range-Abfrage wird der Eintrag mit dem letzten Index in den eckigen Klammern (hier also der Index 5, also die Ruebli) NICHT mit zurückgegeben.
Eine Liste kann mehrere identische Elemente haben. Die einfachste Möglichkeit, Duplikate aus einer Liste zu entfernen, ist sie in ein Set umzuwandeln. Ein Set ist im Gegensatz zu einer Liste weniger dynamisch und lässt keine doppelten Einträge zu.
lt = set(lt)
Nun können wir beispielsweise bestimmen, wie viele verschiedene Buchstaben im Wort swisstopo vorkommen:
len(lt)
Sehr hilfreich sind Sets bei Operationen der Mengenlehre:
set('Landestopografie') & set('swisstopo') # gemeinsame Buchstaben
set('Landestopografie') ^ set('swisstopo') # nur in einem der beiden Begriffe
len(set('Landestopografie') | set('swisstopo')) # Anzahl verschiedener Buchstaben insgesamt
Ein Tupel ist eine unveränderliche Liste mit einer fixen Anzahl an Elementen. Sinnvoll ist dies z.B., wenn wir die Koordinaten eines Punktes in einer Liste – oder eben in einem Tupel – speichern wollen:
bern2d = (600000, 200000)
bern3d = (600000, 200000, 500)
Tupeln werden wir auch bei der Berechnung von Zeiten und Daten wieder begegnen.
Dictionaries sind tatsächlich so etwas wie Nachschlagewerke: Wird nach einem bestimmten Schlüsselwort (key) gefragt, erhält man den dafür hinterlegten Wert (value) zurück.
Dictionaries werden mit geschwungenen Klammern gekennzeichnet. Key und Value werden mit einem Doppelpunkt getrennt.
anreden = {'de':'hoi', 'fr':'salut', 'it':'ciao'}
Alle Elemente in einem Dictionary können spezifisch abgefragt werden:
anreden['it'] # liefert den für den Key 'it' hinterlegten Wert
anreden.keys() # liefert eine Liste mit allen Schlüsselwörtern
anreden.values() # Liste mit allen Werten
anreden.items() # verschachtelte Liste mit Key/Value-Tupel
Das letzte Beispiel zeigt, dass Listen, Sets und Dictionaries eng verwandt sind und vielseitig miteinander kombiniert und ineinander verschachtelt (nested) werden können.
Falls ein neuer Eintrag in das Dictionary aufgenommen werden soll, geht das so:
anreden['en'] = 'hello'
Finde mehr interaktive Beispiele zu den meisten Kapiteln als Python Notebook.