|
|
(101 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| = Datenstrukturen= | | = Datenstrukturen= |
− | Wir haben bisher einfache Variablen kennen gelernt, die nur einen Wert aufnehmen können. Es gibt in Python aber eine ganze Reihe von Variablen die mehrere Werte enthalten können. Dafür gibt es den Begriff Datenstruktur. | + | 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. |
| | | |
− | == Funktionen die auf die folgenden Datenstrukturen angewendet werden können== | + | == 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. |
| | | |
− | === len(x)=== | + | == Konstanten== |
− | * gibt die Länge der Liste '''x''' zurück.
| + | Konstanten gibt es in Python nicht. Will man Werte als konstant kennzeichnen, so schreibt man ihren Namen komplett in Großbuchstaben. |
− | | + | <br> |
− | === max(x)===
| + | In Micropython gibt es allerdings Konstanten.<br> |
− | * gibt den größten Wert aus der Liste '''x''' zurück.
| + | Eine Konstante wird mit der Funktion const() erzeugt:<br> |
− | | + | <pre> |
− | === min(x)===
| + | KONSTANTE_INT = const(42) |
− | * gibt den kleinsten Wert aus der Liste '''x''' zurück.
| + | KONSTANTE_STR = const('Hallo') |
− | | + | KONSTANTE_FLOAT = const(3.14) |
− | === del(x)=== | + | </pre> |
− | * löschen eines Elementes
| + | |
− | ** del(liste[1])
| + | |
− | * löschen der ganzen Datenstruktur
| + | |
− | ** del(liste)
| + | |
| | | |
| == Listen== | | == Listen== |
| | | |
| + | https://medium.com/@pythonfundamentals/python-lists-an-essential-guide-with-code-examples-8c30f61e1c67 |
| === Erzeugen=== | | === Erzeugen=== |
− | * liste = [1, 2, 3]
| + | <pre> |
− | ** Die Werte von Listen werden in eckige Klammern geschrieben.
| + | liste = [1, 2, 3] |
− | ** Werte dürfen mehrfach vorkommen. | + | </pre> |
− | ** Es können unterschiedliche Datentypen in einer Liste enthalten sein.
| + | * Die Werte von Listen werden in eckige Klammern geschrieben.<br> |
− | ** Listen dürfen Listen enthalten
| + | * 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==== | | ====Übung==== |
| * Erzeugt 10 Listen mit einheitlichen und gemischten Datentypen. | | * 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=== | | === Lesen=== |
Zeile 35: |
Zeile 41: |
| * Der Index beginnt mit 0 !!! | | * Der Index beginnt mit 0 !!! |
| * Über den Index kann auf den Wert zugegriffen werden | | * Über den Index kann auf den Wert zugegriffen werden |
− | ** liste[1] => 2
| + | <pre> |
| + | x = liste[1] # => 2 |
| + | </pre> |
| | | |
| ====Übung==== | | ====Übung==== |
Zeile 42: |
Zeile 50: |
| === Verändern=== | | === Verändern=== |
| * Über den Index können einzelne Werte verändert werden. | | * Über den Index können einzelne Werte verändert werden. |
− | ** liste[1] = 5 => [1, 5, 3]
| + | <pre> |
| + | liste[1] = 5 # => [1, 5, 3] |
| + | </pre> |
| | | |
| ====Übung==== | | ====Übung==== |
Zeile 77: |
Zeile 87: |
| === Sortieren=== | | === Sortieren=== |
| ==== .reverse()==== | | ==== .reverse()==== |
− | * kehrt den Inhalt der Liste um. | + | * kehrt den Inhalt der Liste um. (Ohne Sortierung) |
| | | |
− | ==== .sort(k, r)==== | + | ==== .sort(reverse=True|False, key=myFunc)==== |
| * sortiert eine Liste | | * sortiert eine Liste |
| ** Ohne Parameter wird alphabetisch sortiert. | | ** Ohne Parameter wird alphabetisch sortiert. |
Zeile 93: |
Zeile 103: |
| | | |
| ==== .index(x)==== | | ==== .index(x)==== |
− | * index gibt den Index des ersten auftretens von '''x''' in der Liste zurück. | + | * index gibt den Index des ersten Auftretens von '''x''' in der Liste zurück. |
| | | |
| ==== .count(x)==== | | ==== .count(x)==== |
Zeile 100: |
Zeile 110: |
| ====Übung==== | | ====Übung==== |
| * suche nach Einträgen in deinen Listen. | | * suche nach Einträgen in deinen Listen. |
| + | * Zähle einige Werte. |
| | | |
| === Löschen=== | | === Löschen=== |
Zeile 108: |
Zeile 119: |
| ====Übung==== | | ====Übung==== |
| * leere eine Deiner Liste mit .clear() und kontrolliere den Inhalt. | | * leere eine Deiner Liste mit .clear() und kontrolliere den Inhalt. |
| + | |
| + | <br> |
| + | == Tuple== |
| + | * https://pythonflood.com/python-tuples-why-they-matter-and-how-to-use-them-40f0831de21b<br> |
| + | Tuple sind wie Listen, nur können sie nicht verändert werden. Sie sind immutable. |
| + | <br> |
| + | Die Werte eines Tuple werden in () gesetzt. |
| + | <pre> |
| + | my_tuple = (1, 2, 'Hallo') |
| + | my_tuple_single = (42,) # bei nur einem Wert ist ein Komma nötig |
| + | </pre> |
| + | Die Werte im Tuple sind indiziert, wie bei den Listen. Deshalb können sie genauso ausgelesen werden. |
| + | <br> |
| + | ;tuple() |
| + | :damit kann ebenfalls ein Tuple erstellt werden, z.B. aus einer Liste. |
| + | <pre> |
| + | >>> liste = ['', 'Hallo', 'Micropython', 'Mickey', 'Mouse', 'Welt'] |
| + | >>> tuple_liste = tuple(liste) |
| + | >>> tuple_liste |
| + | ('', 'Hallo', 'Micropython', 'Mickey', 'Mouse', 'Welt') |
| + | >>> tuple_liste[1] |
| + | 'Hallo' |
| + | >>> |
| + | </pre> |
| + | ===== Ü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): |
| + | <pre> |
| + | >>> 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 |
| + | >>> |
| + | </pre> |
| + | |
| + | == 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)=== |
| + | * gibt x sortiert zurück. |
| + | |
| + | === del(x)=== |
| + | * löschen eines Elementes - nicht bei Tuple |
| + | ** del(liste[1]) |
| + | * löschen der ganzen Datenstruktur |
| + | ** del(liste) |
| + | |
| + | ==== Übung:==== |
| + | * Wende diese Funktionen auf verschiedene Deiner Listen an. |
| + | * Teste den Unterschied zwischen l.clear() und del(l) aus. |
| + | <br> |
| | | |
| == Dictionaries / Wörterbücher== | | == 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 |
| + | * https://awstip.com/most-used-10-dictionary-methods-in-python-with-examples-5ffe04fec6aa |
| + | * https://soumenatta.medium.com/python-dictionary-tutorial-mastering-key-value-pair-data-structures-for-efficient-programming-56f0eb419e5e |
| + | * https://www.data-science-architect.de/dictionaries-python/ |
| + | <br> |
| + | In Python 3.6 und davor waren Dictionaries unsortiert.<br> |
| | | |
| === Erzeugen=== | | === Erzeugen=== |
Zeile 125: |
Zeile 221: |
| * 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 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 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' ist. Die values dazu könnt Ihr selbst bestimmen. | + | * 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=== | | === Lesen=== |
− | * x = dictionary[key] - gibt den Wert des Schlüssels zurück | + | * x = d[key] - gibt den Wert des Schlüssels zurück |
| * x = d.items() - erstellt eine Liste mit den key:value-Paaren | | * x = d.items() - erstellt eine Liste mit den key:value-Paaren |
| * x = d.keys() - erstellt eine Liste mit den keys | | * x = d.keys() - erstellt eine Liste mit den keys |
Zeile 134: |
Zeile 231: |
| | | |
| ==== Übung==== | | ==== Ü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=== |
| + | * d[neuer_key] = value |
| + | |
| + | ==== Übung==== |
| + | * Fügt zu den beiden ersten Dictionaries weitere Items hinzu. |
| + | * Versucht dem Datensatz des Wohnzimmer noch den Messwert co2 hinzuzufügen. |
| | | |
| === Verändern=== | | === Verändern=== |
Zeile 143: |
Zeile 251: |
| | | |
| ==== Übung==== | | ==== Übung==== |
− | | + | * Verändere einige Werte in dem 3. Dictionary. |
− | === Erweitern===
| + | * Ändere im 3. Dictionary den Namen Luftfeuchte in Feuchte. |
− | * d[neuer_key] = value | + | |
− | | + | |
− | ==== Übung====
| + | |
| | | |
| === Verkleinern=== | | === Verkleinern=== |
Zeile 153: |
Zeile 258: |
| | | |
| ==== Übung==== | | ==== Übung==== |
| + | * Lese die Werte des key Feuchte aus und entferne diese Items. |
| | | |
| === Sortieren=== | | === Sortieren=== |
| * Dictionaries sind grundsätzlich unsortiert! | | * Dictionaries sind grundsätzlich unsortiert! |
| + | * In Python gibt es inzwischen auch sortierte Dictionaries. In Micropython habe diese noch keinen Eingang gefunden. |
| | | |
| === Suchen=== | | === Suchen=== |
− | * kommt im 2. Teil
| + | 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.<br> |
| + | Ein Beispiel mit dem in-Operator hatten wir schon in der 4. Lektion. |
| | | |
| === Löschen=== | | === Löschen=== |
| | | |
− | * del d[k] löscht das ganze item | + | * del d[k] löscht das eine Item. |
| * d.clear() löscht alle items. | | * d.clear() löscht alle items. |
| | | |
| ==== Übung==== | | ==== Übung==== |
| + | * Lösche alle Luftdruck Items. |
| + | * Lösche alle Items des 3. Dictionaries. |
| + | * Lösche das 3. Dictionary komplett. |
| + | |
| + | <br> |
| | | |
| == Strings== | | == Strings== |
| * Strings kann man als Sonderform von Listen betrachten, die nur Zeichen enthalten. | | * Strings kann man als Sonderform von Listen betrachten, die nur Zeichen enthalten. |
− | * Deshalb kann man sie auch so behandeln wie Listen. | + | * Deshalb kann man sie auch so behandeln wie Listen. (Stimmt nur bedingt!) |
| * Strings sind aber immutable also unveränderlich | | * Strings sind aber immutable also unveränderlich |
| ** wenn ein String verändert wird muss jedesmal ein neuer String angeleg werden. | | ** wenn ein String verändert wird muss jedesmal ein neuer String angeleg werden. |
| | | |
− | ==== Übung==== | + | ==== Übung (für Zuhause)==== |
| * Testet aus welche Methoden von Listen bei Strings funktionieren. | | * Testet aus welche Methoden von Listen bei Strings funktionieren. |
| | | |
| === Zusammenführen=== | | === Zusammenführen=== |
| * str1 + str2 | | * str1 + str2 |
| + | * https://realpython.com/python-string-concatenation/ |
| * ' '.join((str1, str2)) | | * ' '.join((str1, str2)) |
| | | |
Zeile 190: |
Zeile 304: |
| | | |
| === Ausrichten=== | | === Ausrichten=== |
− | * s.center(width,fillchar) | + | * s.center(width) |
− | * .ljust() und .rjust() gibt es Micropython nicht. | + | ** Der fillchar-Parameter aus Python geht hier nicht! |
| + | * .ljust() und .rjust() gibt es Microphyton nicht. |
| | | |
| ==== Übung==== | | ==== Übung==== |
− | * gibt deine Strings in verschiedenen Spaltenbreiten und verschiedenen Füllzeichen zentriert aus. | + | * gibt deine Strings in verschiedenen Spaltenbreiten zentriert aus. |
| + | |
| + | === Slicing=== |
| + | * Mithilfe von Slicing lässt sich der Zugriff auf ein Iterable auf einen Ausschnitt begrenzen. |
| + | <pre> |
| + | >>> 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!' |
| + | </pre> |
| + | * 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. |
| + | <br> |
| | | |
| == Weitere Datenstrukturen== | | == Weitere Datenstrukturen== |
| Diese werden nur zur Kenntniss gegeben. Sie werden hier nicht behandelt. | | Diese werden nur zur Kenntniss gegeben. Sie werden hier nicht behandelt. |
− |
| |
− | === Tuple===
| |
− | immutable Liste
| |
| | | |
| === Set=== | | === Set=== |
− | Für Mengen
| + | Sets sind die Datenstruktur zur Arbeit mit Mengen. |
| + | <br> |
| + | Elemente einer Menge müssen einmalig sein! |
| + | <pre> |
| + | menge = {1, 2, 'Hallo'} |
| + | </pre> |
| | | |
− | === Bytearray / Bytestring=== | + | ===== Casting:===== |
− | <pre style="color: red"> In den 2. Teil verschieben.</pre>
| + | set() |
− | Werden nur zur Vorbereitung auf eine serielle Datenübertragung verwendet.<br>
| + | ===== Tip:===== |
− | Datenstrukturen werden in einzelne Bytes zerlegt.<br>
| + | Sets werden hier nicht weiter behandelt. Es gibt aber eine praktische Anwendung.<br> |
− | [https://www.freecodecamp.org/news/python-bytes-to-string-how-to-convert-a-bytestring/ python-bytes-to-string-how-to-convert-a-bytestring ]<br> | + | Wenn man doppelte Einträge in Listen entfernen möchte geht das so sehr einfach: |
− | [https://www.w3resource.com/python/python-bytes.php python-bytes]<br> | + | <pre> |
| + | >>> 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] |
| + | >>> |
| + | </pre> |
| | | |
| ===Array=== | | ===Array=== |
− | Nur über Modul 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.<br> |
| + | Wenn Arrays aber für mathematische Anwendung erforderlich sind, so bietet das Modul array die Möglichkeit arrays zu erstellen. |
| + | |
| + | == Navigation== |
| + | [[Micropython_Kurs_2023_-_Teil_1|Zurück zu Micropython Kurs 2023 - Teil 1]]<br> |
| + | [[Micropython Kurs 2023|Zurück zur "Micropython Kurs 2023" Startseite]]<br> |
| + | [[Programmieren|Zurück zur Programmieren Startseite]]<br> |
| + | [[Attraktor_Wiki|Zurück zur Wiki Startseite]]<br> |
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 haben wir schon in der 2. Lektion kennengelernt.
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:
Tuple sind wie Listen, nur können sie nicht verändert werden. Sie sind immutable.
Die Werte eines Tuple werden in () gesetzt.
Die Werte im Tuple sind indiziert, wie bei den Listen. Deshalb können sie genauso ausgelesen werden.
Probiere aus welche Listen-Methoden bei Tuples funktionieren und welche nicht.
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.
Diese werden nur zur Kenntniss gegeben. Sie werden hier nicht behandelt.
Sets sind die Datenstruktur zur Arbeit mit Mengen.
Elemente einer Menge müssen einmalig sein!
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:
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.