6. Unterrichtsblock

Python Listen

meineListe = ["Apfel", "Zwetschge", "Birne"]

Listen werden verwendet, um mehrere Elemente in einer einzigen Variablen zu speichern.

Listen sind einer von 4 integrierten Datentypen in Python, die zum Speichern von Datensammlungen verwendet werden, die anderen 3 sind Tuple , Set und Dictionary , alle mit unterschiedlichen Qualitäten und Verwendungszwecken.

Im vorherigen 5. Unterrichtsblock haben wir folgende Methoden kennengelernt:

  • Zugriff auf Listen
  • Änderung von Werten
  • Hinzufügen von Werten

Aufgabe

Gehe die Lektionen der vorherigen Unterrichtsstunde durch und wiederhole die Übungen.

Entfernen von Listenelementen

Angegebenes Element entfernen

Die remove()Methode entfernt das angegebene Element.

„Birne“ entfernen:

meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.remove("Birne")
print(meineListe)

Angegebenen Index entfernen

Die pop()Methode entfernt den angegebenen Index.

# Entferne das zweite Element:
meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.pop(1)
print(meineListe)

Wenn man den Index bei pop() nicht angibt, entfernt die Methode das letzte Element.

meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.pop()
print(meineListe)

Das del Schlüsselwort entfernt ebenfalls den angegebenen Index:

meineListe = ["Apfel", "Zwetschge", "Birne"]
del meineListe[0]
print(meineListe)

Das del Schlüsselwort kann die Liste auch komplett löschen.

meineListe = ["Apfel", "Zwetschge", "Birne"]
del meineListe

Leeren einer Liste

Die clear()Methode leert die Liste. Die Liste bleibt bestehen, hat aber keinen Inhalt.

meineListe = ["Apfel", "Zwetschge", "Birne"]
meineListe.clear()
print(meineListe)

Aufgabe

Baue die o.g. Codebeispiele nach und probiere verschiedene Varianten und Abfolgen.

Schleifen durch eine Liste laufen lassen

Man kann die Listenelemente mit einer for Schleife durchlaufen:

Folgendes Beispiel gibt alle Elemente in der Liste einzeln aus:

meineListe = ["Apfel", "Zwetschge", "Birne"]
for x in meineListe:
  print(x)

Durchlaufen von Indexnummern

Man kann die Listenelemente auch durchlaufen, indem man auf ihre Indexnummer verweist. Hierzu verwendet man die Funktionen range()und len(), um eine geeignete Iterable zu erstellen.

Folgende Beispiel gibt alle Artikel anhand ihrer Indexnummer aus:

meineListe = ["Apfel", "Zwetschge", "Birne"]
for i in range(len(meineListe)):
  print(meineListe[i])

Die im obigen Beispiel erstellte Iterable ist [0, 1, 2].

Verwendung einer While-Schleife

Man kann die Listenelemente auch mit einer while Schleife durchlaufen .

Man verwendet hierfür die len()Funktion, um die Länge der Liste zu bestimmen, beginnt dann bei 0 und durchläuft die Listenelemente, indem man sich auf ihre Indizes bezieht.

Hierbei muss man den Index nach jeder Iteration um 1 erhöhen.

Folgendes Beispiel druckt alle Artikel, indem eine while Schleife verwendt wird, um alle Indexnummern zu durchlaufen:

meineListe = ["Apfel", "Zwetschge", "Birne"]
i = 0
while i < len(meineListe):
  print(meineListe[i])
  i = i + 1

Schleifen mit Listenverständnis

List Comprehension (Listenverständnis) bietet die kürzeste Syntax zum Durchlaufen von Listen:

Folgendes Beispiel zeigt die Kurzform einer for Schleife, die alle Elemente in einer Liste ausgibt:

meineListe = ["Apfel", "Zwetschge", "Birne"]
[print(x) for x in meineListe]

Aufgabe

Baue o.g. Codebeispiele nach und variiere mit verschiedenen Aufbauten. Nimm auch Lektionen aus den vorhergegangenen Unterrichtsblöcken mit in die Beispiele.

Listenverständnis (List Comprehension)

Das Listenverständnis bietet eine kürzere Syntax, wenn man eine neue Liste basierend auf den Werten einer vorhandenen Liste erstellen möchten.

Beispiel:

Basierend auf einer Liste von Früchten möchten man eine neue Liste, die nur die Früchte mit dem Buchstaben „a“ im Namen enthält.

Ohne die Syntax der List Comprehension müssen man eine for Anweisung mit einem bedingten Test darin schreiben:

meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]
neueliste = []

for x in meineListe:
  if "a" in x:
    neueliste.append(x)

print(neueliste)

Mit dem Listenverständnis kann man dies alles mit nur einer Codezeile erledigen:

meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]

neueliste = [x for x in meineListe if "a" in x]

print(neueliste)

Die Syntax

neueliste = [ausdruck for artikel in liste if bedingung == True]

Der Rückgabewert ist eine neue Liste, wobei die alte Liste unverändert bleibt.

Bedingung

Die Bedingung ist wie ein Filter, der nur die Elemente mit dem Wert True akzeptiert.

Akzeptieren Sie nur Artikel, die nicht „Apfel“ sind:

neueliste = [x for x in meineListe if x != "Apfel"]

Die Bedingung if x != "Apfel" True wird für alle Elemente außer "Apfel"  zurückgegeben, wodurch die neue Liste alle Früchte außer "Apfel" enthält.

Die Bedingung ist optional und kann weggelassen werden:

Ohne if-Aussage:

neueliste = [x for x in meineListe]

Iterable

Eine Iterable kann jedes iterierbare Objekt sein, wie eine Liste, ein Tupel, eine Menge usw.

Man kann die Funktion range() verwenden, um eine Iterable zu erstellen:

neueliste = [x for x in range(10)]

Gleiches Beispiel mit einer Bedingung, nur Zahlen unter 5 zu akzeptieren:

neueliste = [x for x in range(10) if x < 5]

Ausdruck

Der Ausdruck ist das aktuelle Element in der Iteration, aber auch das Ergebnis, das man bearbeiten kann, bevor es zu einem Listenelement in der neuen Liste wird:

Wandelt die Werte in der neuen Liste in Großbuchstaben um:

neueliste = [x.upper() for x in meineListe]

Man kann das Ergebnis beliebig einstellen. Folgendes Beispiel setzt alle Werte in der neuen Liste auf „Hallo“:

neueliste = ['Hallo' for x in neueliste]

Der Ausdruck kann auch Bedingungen enthalten, nicht wie ein Filter, sondern als Möglichkeit, das Ergebnis zu manipulieren:

Ausgabe von „Mango“ statt „Banane“:

neueliste = [x if x != "Banane" else "Mango" for x in neueliste]

Der Ausdruck im obigen Beispiel sagt:

„Gib den Artikel aus, wenn dieser keine Banane ist, wenn es eine Banane ist, gib Mango zurück“.

Aufgabe

Baue o.g. Codebeispiele nach und erweitere diese duch Erkenntnisse aus anderen Unterrichtsblöcken.

Listen sortieren

Liste alphanumerisch sortieren

Listenobjekte haben eine sort()Methode, die die Liste standardmäßig alphanumerisch aufsteigend sortiert:

Sortiert die Liste alphabetisch:

meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]
meineListe.sort()
print(meineListe)

Sortiert die Liste numerisch:

meinezahlen = [100, 50, 65, 82, 23]
meinezahlen.sort()
print(meinezahlen)

Absteigend sortieren

Um absteigend zu sortieren, verwenden Sie das Schlüsselwortargument reverse = True:

Sortiert die Liste absteigend:

meineListe = ["Apfel", "Zwetschge", "Birne", "Kirsche", "Mango", "Banane", "Ananas"]
meineListe.sort(reverse = True)
print(meineListe)

Sortiert die Liste absteigend:

meinezahlen = [100, 50, 65, 82, 23]
meinezahlen.sort(reverse = True)
print(meinezahlen)

Sortierfunktion anpassen

Man kann auch eine eigene Funktion anpassen, indem man das Schlüsselwortargument .key = function verwenden

Die Funktion gibt eine Zahl zurück, die zum Sortieren der Liste verwendet wird (die niedrigste Zahl zuerst):

Sortiert die Liste danach, wie nahe die Zahl an 50 liegt:

def meinefunktion(n):
  return abs(n - 50)

meinezahlen = [100, 50, 65, 82, 23]
meinezahlen.sort(key = meinefunktion)
print(meinezahlen)

Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung

Standardmäßig ist die sort()Methode case sensitive, was dazu führt, dass alle Großbuchstaben vor Kleinbuchstaben sortiert werden:

Die Sortierung nach Groß- und Kleinschreibung kann zu einem unerwarteten Ergebnis führen:

meineListe = ["banane", "Orange", "Kiwi", "kirsche"]
meineListe.sort()
print(meineListe)

Man kann jedoch eingebaute Funktionen als Schlüsselfunktionen beim Sortieren einer Liste verwenden.

Wenn man also eine Sortierfunktion möchte, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird, verwendt man str.lower als Schlüsselfunktion:

Führt eine Sortierung der Liste ohne Berücksichtigung der Groß-/Kleinschreibung durch:

meineListe = ["banane", "Orange", "Kiwi", "kirsche"]
meineListe.sort(key = str.lower)
print(meineListe)

Umgekehrte Reihenfolge

Was ist, wenn man die Reihenfolge einer Liste unabhängig vom Alphabet umkehren möchte? Die reverse()Methode kehrt die aktuelle Sortierreihenfolge der Elemente um.

Kehrt die Reihenfolge der Listenelemente um:

meineListe = ["banane", "Orange", "Kiwi", "kirsche"]
meineListe.reverse()
print(meineListe)

Aufgabe

Baue o.g. Codebeispiele nach und erweitere diese duch Erkenntnisse aus anderen Unterrichtsblöcken.

Aufgabe

Aufgabe

Kombiniere das heute Erlernte mit den Inhalten vorherigen Unterrichtsblöcke und probiere verschiedene Konstellationen aus.