Zusammenfassung Datenstrukturen und Funktionen

Zusammenfassung

For - Schleifen

For - Schleifen lassen sich mit allem benutzen, über das man iterieren kann.

  • range
In [1]:
for x in range(5):
    print(x)
0
1
2
3
4
  • Listen
In [2]:
for x in [1, 2, 3]:  # <-- x ist ein beliebiger Name
    print(x)
1
2
3
  • Strings
In [3]:
for x in "Hallo":
    print(x)
H
a
l
l
o
  • Dateien
In [ ]:
# Geht natürlich nur wenn eine Datei "dateiname.txt" existiert
with open("dateiname.txt", "r") as datei:
    for x in datei:
        print(x)
  • Sets
In [5]:
for x in {1, 1, 2, 2, 3, 3}:
    print(x)
1
2
3
  • Dictionaries
In [6]:
for x in {"a": 1, "b": 2, "c": 3}:
    print(x)
a
b
c
  • und viele mehr. Im Zweifel einfach ausprobieren

Datenstrukturen

Listen

Listen sind immer dann nützlich wenn man viele ähnliche Dinge verarbeiten will, und dabei die Reihenfolge noch entscheidend ist.

Z.B: Messdaten

In [7]:
meine_liste = ["a", "b", "c", "d", "e"]

Listen haben diverse Methoden, mit denen man ihren Inhalt verändern kann.

  • append (hängt ein Element hinten an die Liste an)
In [8]:
meine_liste.append("a")
print(meine_liste)
['a', 'b', 'c', 'd', 'e', 'a']
  • pop (entfernt ein Element an der angegebenen Stelle)
In [9]:
entferntes_element = meine_liste.pop(1)
print("Entfernt:", entferntes_element)
print(meine_liste)
Entfernt: b
['a', 'c', 'd', 'e', 'a']
  • remove (entfernt das angegebene Element wenn es das erste mal auftaucht)
In [10]:
meine_liste.remove("d")
print(meine_liste)
['a', 'c', 'e', 'a']
  • count (zählt, wie oft ein Element in der Liste auftaucht)
In [11]:
meine_liste.count("a")
Out[11]:
2
  • reverse (kehrt die Reihenfolge der Liste um)
In [12]:
meine_liste.reverse()
print(meine_liste)
['a', 'e', 'c', 'a']

Dabei geht die alte Reihenfolge verloren! Wer stattdessen eine neue Liste möchte, ohne die alte zu verändern, kann reversed benutzen:

In [13]:
umgedrehte_liste = list(reversed(meine_liste))  # meine_liste verändert sich dabei nicht
print(umgedrehte_liste)
['a', 'c', 'e', 'a']
  • sort (sortiert die Liste)
In [14]:
meine_liste.sort()
print(meine_liste)
['a', 'a', 'c', 'e']

Die alte Sortierung geht dabei verloren! Alternative: sorted

In [15]:
unsortierte_liste = ["x", "c", "a", "e"]
sortierte_liste = sorted(unsortierte_liste)
print(sortierte_liste)
['a', 'c', 'e', 'x']

Sets

Eine ungeordnete Sammlung von unterscheidbaren Objekten (siehe https://de.wikipedia.org/wiki/Menge_(Mathematik))

Wird man vermutlich seltener brauchen als z.B. Listen.

Anwendungen sind z.B. das Entfernen von mehrfach enthaltenen Elementen aus einer Liste:

In [16]:
liste_mit_duplikaten = ['a', 'b', 'c', 'a', 'a', 'a', 'b', 'd', 'b', 'b', 'b', 'c', 'c', 'e']
menge = set(liste_mit_duplikaten)
liste_ohne_duplikate = list(menge)
print(liste_ohne_duplikate)
['d', 'a', 'c', 'e', 'b']

Außerdem: Mengenoperationen wie Schnitt, Vereinigung, Differenz, ...

Dictionaries

Eine Art Wörterbuch. Speichert Paare von Schlüsseln und Werten. Kennt man den Schlüssel, kann man auf den Wert zugreifen. Praktisch, um Dinge mit mehreren Attributen zu speichern.

Beispiele:

Patient
In [17]:
patient = {"Vorname": "Hans",
           "Name": "Müller",
           "Alter": 75,
           "Beschwerden": ["Kopfweh", "Rücken", "Magenschmerzen"]}

print("Patient", patient["Vorname"], patient["Name"], "hat folgende Beschwerden:")
for beschwerde in patient["Beschwerden"]:
    print(beschwerde, end=" ")
Patient Hans Müller hat folgende Beschwerden:
Kopfweh Rücken Magenschmerzen 
Atom
In [18]:
atom = {"Element": "H",
        "Name": "Wasserstoff",
        "Atommasse": 1.008}

print(atom)
{'Element': 'H', 'Name': 'Wasserstoff', 'Atommasse': 1.008}
  • Auf einen Wert zugreifen:
In [19]:
print(atom["Element"])
H
  • Einen Wert ändern:
In [20]:
atom["Element"] = "C"
print(atom)
{'Element': 'C', 'Name': 'Wasserstoff', 'Atommasse': 1.008}
  • Über alle Schlüssel iterieren:
In [21]:
for schlüssel in atom.keys():
    print(schlüssel)
    
# Oder

for schlüssel in atom:
    print(schlüssel)
Element
Name
Atommasse
Element
Name
Atommasse
  • Über alle Werte iterieren:
In [22]:
for value in atom.values():
    print(value)
C
Wasserstoff
1.008
  • Über Schlüssel und Wert gleichzeitig iterieren:
In [23]:
for key, value in atom.items():
    print(key, "->", value)
Element -> C
Name -> Wasserstoff
Atommasse -> 1.008
  • Ein Element entfernen
In [24]:
name = atom.pop("Name")
print(name)
print(atom)
Wasserstoff
{'Element': 'C', 'Atommasse': 1.008}

Funktionen

Funktionen helfen, den Code besser zu gliedern. Wenn man beispielsweise dreimal in seinem Skript eine Datei öffnet und ausliest, ist es vermutlich sinnvoll, eine Funktion dafür zu schreiben. Damit vermeidet man, sich zu wiederholen. Das reduziert wiederum die Anzahl der geschriebenen Code-Zeilen und damit die Wahrscheinlichkeit für fehlerhaften Code.

Schlechtes Beispiel:
In [ ]:
with open("datei1", "r") as f:
    for line in f:
        print(line)

with open("datei2", "r") as f:
    for line in f:
        print(line)

with open("datei3", "r") as f:
    for line in f:
        print(line)
Besser: Mit Funktion
In [ ]:
def lies_datei(dateiname):
    with open(dateiname, "r") as f:
        for line in f:
            print(line)

lies_datei("datei1")
lies_datei("datei2")
lies_datei("datei3")

Funktionen können Parameter haben (Werte, die man ihnen beim Funktionsaufruf mitgibt, wie im obigen Beispiel die Variable dateiname).

Funktionen können Rückgabewerte haben.

Funktion mit Parametern und Rückgabewert:
In [27]:
def f(x):            # <- x ist der Parameter
    return x + 5     # <- durch das return hat die Funktion einen Rückgabewert

rückgabewert = f(5)  # bei Funktionsaufruf, gibt die Funktion einen Wert zurück, den
                     # wir dann weiter verarbeiten können
Funktion mit Parametern, aber ohne Rückgabewert
In [28]:
def hallo(name):
    print("Hallo", name)
Funktion ohne Parameter, aber Rückgabewert
In [29]:
def f():
    return 5
Funktion ohne Parameter und ohne Rückgabewert
In [30]:
def f():
    print("Hallo")