Datenstrukturen
Wir haben schon über Variablen gesprochen, die einen Wert enthalten können.
Es gibt in Phyton aber eine ganze Reihe von Variablen die mehrere Werte enthalten können. Dafür gibt es den Begriff Datenstruktur.
Einfache Variablen
Einfache Variablen haben wir schon in der 2. Lektion kennengelernt.
- Sie können nur einen Wert enthalten.
- Sie sind nicht auf einen Datentyp festgelegt, sondern können aufnehmen, was man ihnen gerade zuweist.
Konstanten
Konstanten gibt es in Python nicht. Will man Werte als konstant kennzeichnen, so schreibt man ihren Namen komplett in Großbuchstaben.
In Micropython gibt es allerdings Konstanten.
Eine Konstante wird mit der Funktion const() erzeugt:
KONSTANTE_INT = const(42)
KONSTANTE_STR = const('Hallo')
KONSTANTE_FLOAT = const(3.14)
Listen
https://medium.com/@pythonfundamentals/python-lists-an-essential-guide-with-code-examples-8c30f61e1c67
Erzeugen
liste = [1, 2, 3]
- Die Werte von Listen werden in eckige Klammern geschrieben.
- Listen sind veränderbar - mutable
- Werte dürfen mehrfach vorkommen.
- Es können unterschiedliche Datentypen in einer Liste enthalten sein.
- Listen dürfen Listen enthalten
Übung
- Erzeugt 10 Listen mit einheitlichen und gemischten Datentypen.
- Erzeuge dabei auch Listen die eine oder mehrere Listen enthalten.
- Wir sichern die Listen als listen_1.py
Lesen
- Die Werte in einer Liste sind indiziert.
- Der Index beginnt mit 0 !!!
- Über den Index kann auf den Wert zugegriffen werden
x = liste[1] # => 2
Übung
- Greift über den Index auf einzelne Elemente Eurer Listen zu.
Verändern
- Über den Index können einzelne Werte verändert werden.
liste[1] = 5 # => [1, 5, 3]
Übung
- Verändert einzelne Werte in euren Listen und überprüft die Änderung
- Ändert den Datentyp einzelner Elemente
Erweitern
.insert(i, x)
- fügt an Index i den Wert x ein.
.append(x)
- fügt ein neues Element zur Liste hinzu
- liste.append([10, 20]) => [1, 2, 3, [10, 20]]
.extend(x)
- fügt ggf. mehrere Elemente hinzu.
- liste.extend([10, 20]) => [1, 2, 3, 10, 20]
Übung
- Erweitert eure Listen mit allen Methoden und überprüft die Änderungen
Verkleinern
.pop([i])
- Entfernt das Element mit Index i aus der Liste und gibt es zurück.
- ohne i wird das letzte Element ausgewählt.
.remove(x)
- Entfernt das erste Element mit dem Wert x.
Übung
- Holt mit pop ein Element aus einer Liste und zeigt es mit print() an.
- Entfernt alle Elemente mit dem selben Wert aus einer Liste.
Sortieren
.reverse()
- kehrt den Inhalt der Liste um. (Ohne Sortierung)
.sort(reverse=True|False, key=myFunc)
- sortiert eine Liste
- Ohne Parameter wird alphabetisch sortiert.
- k(ey) gibt den Sortierschlüssel an. Z.B. Länge bei Strings.
- r(everse) gibt eine umgekehrte Sortierung zurück.
- Es können nur gleiche Datentypen sortiert werden.
Übung
- Sortierte ein paar Deiner Listen.
- Prüfe ob wirklich nur gleiche Datentypen sortiert werden können.
Suchen
.index(x)
- index gibt den Index des ersten Auftretens von x in der Liste zurück.
.count(x)
- gibt zurück wie oft x in der Liste vorkommt.
Übung
- suche nach Einträgen in deinen Listen.
- Zähle einige Werte.
Löschen
.clear()
- alle Elemente einer Liste entfernen.
Übung
- leere eine Deiner Liste mit .clear() und kontrolliere den Inhalt.
Tuple
Tuple sind wie Listen, nur können sie nicht verändert werden. Sie sind immutable.
Die Werte eines Tuple werden in () gesetzt.
my_tuple = (1, 2, 'Hallo')
my_tuple_single = (42,) # bei nur einem Wert ist ein Komma nötig
Die Werte im Tuple sind indiziert, wie bei den Listen. Deshalb können sie genauso ausgelesen werden.
- tuple()
- damit kann ebenfalls ein Tuple erstellt werden, z.B. aus einer Liste.
>>> liste = ['', 'Hallo', 'Micropython', 'Mickey', 'Mouse', 'Welt']
>>> tuple_liste = tuple(liste)
>>> tuple_liste
('', 'Hallo', 'Micropython', 'Mickey', 'Mouse', 'Welt')
>>> tuple_liste[1]
'Hallo'
>>>
Übung:
Probiere aus welche Listen-Methoden bei Tuples funktionieren und welche nicht.
Tuple vs. Listen
Ich mal den Speicherbedarf von Tuples und Listen verglichen (M5Stick C):
>>> messungen = 60*24
>>> temp_werte = []
>>> import gc
>>> gc.mem_free()
76144
>>> for i in range(messungen):
temp_werte.append((33.4, 21.3, 23.7, 27.0))
>>> gc.mem_free()
21824
>>> temp_werte = []
>>> gc.mem_free()
76144
>>> for i in range(messungen):
temp_werte.append([33.4, 21.3, 23.7, 27.0])
>>> gc.mem_free()
15424
>>>
Funktionen die auf Listen und Tuple angewendet werden können
len(x)
- gibt die Länge der Liste x zurück.
max(x)
- gibt den größten Wert aus der Liste x zurück.
min(x)
- gibt den kleinsten Wert aus der Liste x zurück.
sum(x)
- gibt die Summe der Werte in x zurück.
sorted(x)
del(x)
- löschen eines Elementes - nicht bei Tuple
- löschen der ganzen Datenstruktur
Übung:
- Wende diese Funktionen auf verschiedene Deiner Listen an.
- Teste den Unterschied zwischen l.clear() und del(l) aus.
Dictionaries / Wörterbücher
https://medium.com/@pythonfundamentals/python-dictionaries-a-comprehensive-guide-with-code-examples-9e425a9e324e
https://pythonflood.com/python-dictionaries-the-key-ingredient-to-data-mastery-a6060ea83c15
In Python 3.6 und davor waren Dictionaries unsortiert.
Erzeugen
dictionary = {key1: value1, key2: value2}
- Dictionaries enthalten eine Liste von key:value Paaren.
- key = Schlüssel
- value = Wert
- item = Schlüssel:Wert-Paar
- Die items sind nicht sortiert und können ihre Reihenfolge verändern.
- Keys dürfen nur einmal vorkommen.
- Keys dienen als Index.
- Values dürfen Dictionaries und andere Datenstrukturen enthalten.
Übung
- Erstelle ein Wörterbuch, das die Zahlen 0 bis 9 als Schlüssel und die Wörter als Wert enthält.
- Erstelle ein Wörterbuch das die deutschen Worte für die Zahlen 0 bis 9 als key und die englischen Worte als value enthält.
- Erstelle ein Dictionary das 'Aussen', 'Wohnzimmer' und 'Schlafzimmer' als key enthält und die values dazu enbenfalls ein Dictionary mit den keys 'Temperatur', 'Luftdruck' und 'Luftfeuchte' sind. Die values dazu könnt Ihr selbst bestimmen.
- Diese Dictionaries als dict_1.py sichern.
Lesen
- x = d[key] - gibt den Wert des Schlüssels zurück
- x = d.items() - erstellt eine Liste mit den key:value-Paaren
- x = d.keys() - erstellt eine Liste mit den keys
- x = d.values() - erstellt eine Liste mit den values
Übung
- Lasst Euch aus der 1. Liste die Worte für einige Zahlen ausgeben.
- Lasst Euch aus der 2. Liste die englischen Worte für die deutschen Zahlenworte ausgeben.
- Lasst Euch die Temperaur aller 3 Messstellen anzeigen.
- Spielt ein bischen mit den 3 Methoden herum.
Erweitern
Übung
- Fügt zu den beiden ersten Dictionaries weitere Items hinzu.
- Versucht dem Datensatz des Wohnzimmer noch den Messwert co2 hinzuzufügen.
Verändern
- value eines items ändern
- key eines items ändern
- d[neuer_key] = d[alter_key]
del[alter_key]
- d[neuer_key] = d.pop(alter_key)
Übung
- Verändere einige Werte in dem 3. Dictionary.
- Ändere im 3. Dictionary den Namen Luftfeuchte in Feuchte.
Verkleinern
- d.pop(key) - gibt das item mit dem key zurück und entfernt es.
Übung
- Lese die Werte des key Feuchte aus und entferne diese Items.
Sortieren
- Dictionaries sind grundsätzlich unsortiert!
- In Python gibt es inzwischen auch sortierte Dictionaries. In Micropython habe diese noch keinen Eingang gefunden.
Suchen
Zum Suchen in Dictionaries gibt keine Methode. Entweder muss über das Dictionary iteriert werden, oder mit in geprüft werden ob der key vorhanden ist.
Ein Beispiel mit dem in-Operator hatten wir schon in der 4. Lektion.
Löschen
- del d[k] löscht das eine Item.
- d.clear() löscht alle items.
Übung
- Lösche alle Luftdruck Items.
- Lösche alle Items des 3. Dictionaries.
- Lösche das 3. Dictionary komplett.
Strings
- Strings kann man als Sonderform von Listen betrachten, die nur Zeichen enthalten.
- Deshalb kann man sie auch so behandeln wie Listen. (Stimmt nur bedingt!)
- Strings sind aber immutable also unveränderlich
- wenn ein String verändert wird muss jedesmal ein neuer String angeleg werden.
Übung (für Zuhause)
- Testet aus welche Methoden von Listen bei Strings funktionieren.
Zusammenführen
- str1 + str2
- ' '.join((str1, str2))
Übung
- Erstelle mehrere Strings und probiere beide Methoden zum Zusammenführen.
Vervielfachen
Übung
- Spiele ein wenig mit der Multiplikation von Strings.
Ausrichten
- s.center(width)
- Der fillchar-Parameter aus Python geht hier nicht!
- .ljust() und .rjust() gibt es Microphyton nicht.
Übung
- gibt deine Strings in verschiedenen Spaltenbreiten zentriert aus.
Slicing
- Mithilfe von Slicing lässt sich der Zugriff auf ein Iterable auf einen Ausschnitt begrenzen.
>>> text = 'Hallo Micropython - du bist klasse!'
>>> text[0:5]
'Hallo'
>>> text[:5]
'Hallo'
>>> text[6:17]
'Micropython'
# Von hinten:
>>> text[-7:-1]
'klasse'
>>> text[-7:]
'klasse!'
- Slicing funktioniert bei allen Datenstrukturen mit nummerischem Index.
Übung:
- Zerlege den String text mit Slicing in seine einzelnen Worte und speichere diese in jeweils einer Variablen. Z.B. text1, text2 usw.
Weitere Datenstrukturen
Diese werden nur zur Kenntniss gegeben. Sie werden hier nicht behandelt.
Set
Sets sind die Datenstruktur zur Arbeit mit Mengen.
Elemente einer Menge müssen einmalig sein!
menge = {1, 2, 'Hallo'}
Casting:
set()
Tip:
Sets werden hier nicht weiter behandelt. Es gibt aber eine praktische Anwendung.
Wenn man doppelte Einträge in Listen entfernen möchte geht das so sehr einfach:
>>> meine_liste = [1, 2, 3, 3, 1, 5]
>>> mein_set = set(meine_liste)
>>> mein_set
{5, 1, 2, 3}
>>> kleine_liste = list(mein_set)
>>> kleine_liste
[5, 1, 2, 3]
>>>
Array
Arrays sind in Python nicht im Core implementiert. Sie werden meist auch nicht gebraucht, weil sie durch Listen gebildet werden können. Zudem sind Listen flexibler in der Ausgestaltung.
Wenn Arrays aber für mathematische Anwendung erforderlich sind, so bietet das Modul array die Möglichkeit arrays zu erstellen.
Navigation
Zurück zu Micropython Kurs 2023 - Teil 1
Zurück zur "Micropython Kurs 2023" Startseite
Zurück zur Programmieren Startseite
Zurück zur Wiki Startseite