lehrkraefte:snr:informatik:python:listen

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:python:listen [2021/10/23 13:09]
Olaf Schnürer [Listen sind mutabel/veränderlich (englisch mutable)]
lehrkraefte:snr:informatik:python:listen [2022/09/27 11:48] (current)
Olaf Schnürer
Line 1: Line 1:
 +~~NOTOC~~
 ====== Listen ====== ====== Listen ======
  
Line 17: Line 18:
 Der Ausdruck ''["Anna", "Berta", "Charly", "Daniel", "Emil", "Ida", "Berta"]'' im obigen Programm erzeugt eine sogenannte //Liste// Der Ausdruck ''["Anna", "Berta", "Charly", "Daniel", "Emil", "Ida", "Berta"]'' im obigen Programm erzeugt eine sogenannte //Liste//
 Abstrakt ist eine Liste eine Datenstruktur, die eine geordnete endliche Folge von Elementen enthält. Wie im Beispiel können Elemente mehrfach vorkommen. Abstrakt ist eine Liste eine Datenstruktur, die eine geordnete endliche Folge von Elementen enthält. Wie im Beispiel können Elemente mehrfach vorkommen.
-Die Variable ''schuelerliste'' verweist((Dieses Wort ist bewusst gewählt: Wie später hoffentlich klar wird (wenn ich von Speicheradressen schreibe), weiss ''schuelerliste'' nur, wo die Liste im Speicher steht, ist aber nicht selbst diese Liste.)) auf diese Liste.+Der Wert der Variablen ''schuelerliste'' ist diese Liste.
 </WRAP> </WRAP>
  
Line 62: Line 63:
 print(a) print(a)
 b = schuelerliste[:4]  b = schuelerliste[:4] 
-print(b)  
 # Lässt man den ersten Parameter weg, wird dieser also automatisch auf ... gesetzt. # Lässt man den ersten Parameter weg, wird dieser also automatisch auf ... gesetzt.
 +print(b) 
  
 c = schuelerliste[2: c = schuelerliste[2:
-print(c) 
 # Lässt man den zweiten Parameter weg, wird dieser automatisch auf ... gesetzt. # Lässt man den zweiten Parameter weg, wird dieser automatisch auf ... gesetzt.
 +print(c)
  
 d = schuelerliste[:] d = schuelerliste[:]
-print(d) 
 # Lässt man beide Parameter weg, so werden diese automatisch auf ... und ... gesetzt. # Lässt man beide Parameter weg, so werden diese automatisch auf ... und ... gesetzt.
 # Dies ist nützlich, um eine Kopie der Liste zu erstellen, vgl. die Diskussion unten, wo wir erklären, dass Listen //mutabel// sind. # Dies ist nützlich, um eine Kopie der Liste zu erstellen, vgl. die Diskussion unten, wo wir erklären, dass Listen //mutabel// sind.
 +print(d)
  
 # Die beiden Parameter dürfen auch negativ sein! Was bewirkt das? Hinweis: Zähle vom Ende der Liste! # Die beiden Parameter dürfen auch negativ sein! Was bewirkt das? Hinweis: Zähle vom Ende der Liste!
Line 92: Line 93:
 <code python> <code python>
 h = schuelerliste[::-1]  h = schuelerliste[::-1] 
-print(h) 
 # Beachte hier, dass die weggelassenen beiden ersten Parameter hier nicht wie oben durch ... und ... ersetzt werden, # Beachte hier, dass die weggelassenen beiden ersten Parameter hier nicht wie oben durch ... und ... ersetzt werden,
 # sondern auf Grund der negativen Schrittweite durch ... und ... # sondern auf Grund der negativen Schrittweite durch ... und ...
 +print(h)
 </code> </code>
 </WRAP> </WRAP>
Line 129: Line 130:
 print(schuelerliste) print(schuelerliste)
 schuelerliste.sort() schuelerliste.sort()
 +print(schuelerliste)
 +schuelerliste.reverse()
 print(schuelerliste) print(schuelerliste)
 </code> </code>
-Beachte die neue Syntax: *Name der Liste) + Punkt + Funktionsaufruf! Solche Funktionsaufrufe verändern bisweilen nur die Liste (wie bei ''insert'') bisweilen verändern sie die Liste und liefern einen Rückgabewert (wie bei ''pop''). +Beachte die neue Syntax: (Name der Liste) + Punkt + Funktionsaufruf! Solche Funktionsaufrufe verändern bisweilen nur die Liste (wie ''insert'') bisweilen verändern sie die Liste und liefern einen Rückgabewert (wie ''pop''). 
 </WRAP> </WRAP>
  
Line 140: Line 143:
 </WRAP> </WRAP>
  
 +===== Was Listen alles enthalten können =====
 +
 +<WRAP round info>
 +Listen sind sehr flexible Datenstrukturen: Sie können als Elemente verschiedene Datentypen (Integers/ganze Zahlen; Strings/Zeichenketten; Boolesche Werte/Wahrheitswerte etc.) enthalten; Elemente können sogar selbst Listen sein:
 +<code python>
 +seltsameliste = ["Anna", 2, "Charly", True, [1, 2, False, "Hallo"]]
 +print(seltsameliste)
 +print(seltsameliste[4])
 +print(seltsameliste[4][2])
 +</code>
 +</WRAP>
 +
 +===== Listen erzeugen =====
 +
 +<WRAP round todo>
 +Verstehe die folgenden Befehle!
 +<code python>
 +zahlen = list(range(10))
 +print(zahlen)
 +zahlen2 = list(range(10, 30, 3))
 +print(zahlen2)
 +
 +zahlen3 = [x*x for x in zahlen]
 +print(zahlen3)
 +</code>
 +</WRAP>
 +
 +<WRAP round todo>
 +Schreibe ein Programm, das mit Hilfe des [[https://de.wikipedia.org/wiki/Sieb_des_Eratosthenes|Siebs des Eratosthenes]] eine Liste aller Primzahlen bis zu einer gegebenen Grenze ''n'' ausgibt.
 +</WRAP>
  
 ===== Listen sind mutabel/veränderlich (englisch mutable) ===== ===== Listen sind mutabel/veränderlich (englisch mutable) =====
Line 164: Line 197:
 {{:lehrkraefte:snr:informatik:python:variable-als-verweis.jpg?direct&400|}} {{:lehrkraefte:snr:informatik:python:variable-als-verweis.jpg?direct&400|}}
  
-Die Variable ''a'' wird mit dem Befehl ''a = [0, 1, 2, 3]'' mit dieser Speicheradresse verknüpft (//verknüpfen// bedeutet, dass der Computer in einer Art Tabelle zu jedem Variablennamen die zugehörige Speicheradresse kennt). Hilfreich ist es, sich diese Verknüpfung wie im obigen Bild als Pfeil auf die entsprechende Position im Speicher vorzustellen. Man sagt deswegen auch, dass ''a'' auf diese Speicheradresse verweist.+Die Variable ''a'' wird mit dem Befehl ''a = [0, 1, 2, 3]'' mit dieser Speicheradresse verknüpft (//verknüpfen// bedeutet, dass der Computer in einer Art Tabelle zu jedem Variablennamen die zugehörige Speicheradresse kennt). Hilfreich ist es, sich diese Verknüpfung wie im obigen Bild als Pfeil auf die entsprechende Position im Speicher vorzustellen. Man sagt deswegen auch, dass ''a'' auf diese Speicheradresse verweist. Der //Wert// von ''a'' ist das an dieser Speicheradresse gespeicherte Datum [0, 1, 2, 3].
  
 Das obige Bild malt man kurz wie folgt: Das obige Bild malt man kurz wie folgt:
Line 223: Line 256:
 print(id(b)) print(id(b))
 </code> </code>
 +Der Befehl ''b = a'' bewirkt wieder, dass ''a'' und ''b'' auf dieselbe Speicheradresse verweisen:
 +
 +<WRAP round box>
 +<nowiki> a  --------->  3  <---------  b </nowiki>
 +</WRAP>
 +
 Da ''a'' als Integer-Variable immutabel ist, kann der Befehl ''b = 4'' den Inhalt der entsprechenden Speicheradresse nicht verändern. Stattdessen wird an einer freien Speicheradresse 4 als Wert der Variablen ''b'' gespeichert. Da ''a'' als Integer-Variable immutabel ist, kann der Befehl ''b = 4'' den Inhalt der entsprechenden Speicheradresse nicht verändern. Stattdessen wird an einer freien Speicheradresse 4 als Wert der Variablen ''b'' gespeichert.
  
-Der Leser mag sich fragen, wovon es abhängt, ob ein //Datentyp// (Beispiel für Datentypen sind strings, integers, floats, Booleans, lists) mutabel oder immutabel ist. Die Antwort ist, dass dies schlicht von den Entwicklern der Sprache Python so festgesetzt wurde.+Wovon hängt es ab, ob ein //Datentyp// (Beispiele für Datentypen sind strings, integers, floats, Booleans, lists) mutabel oder immutabel ist? Dies ist schlicht von den Entwicklern der Sprache Python so festgesetzt worden.
  
-Will man wirklich eine neue Liste erzeugen (also eine Kopie der alten Liste an einer neuen Speicheradresse), so tut es in unserem Fall((Bei verschachtelten Listen muss man besser aufpassen und die Befehle copy oder deepcopy aus dem Modul copy verwenden: Die unterschiedlichen Effekte sind hier illustriert:+Will man wirklich eine Kopie einer gegebenen Liste (an einer neuen Speicheradresse) erzeugen, so tut es((Bei verschachtelten Listen muss man besser aufpassen und die Befehle copy oder deepcopy aus dem Modul copy verwenden: Die unterschiedlichen Effekte sind hier illustriert:
 <code python> <code python>
 import copy import copy
Line 265: Line 304:
 </code> </code>
  
-Wer noch mehr wissen will, sei auf [[lehrkraefte:snr:informatik:python:variablen-in-python|hier]] verwiesen.+Wer mehr wissen will, mag [[lehrkraefte:snr:informatik:python:variablen-in-python|hier]] weiterlesen.
 </WRAP> </WRAP>
  
- +2aLM und 2dNP bis hier am 27.10.2021 (jedenfalls einige
-===== Was Listen alles enthalten können ===== +===== Aufgaben =====
- +
-<WRAP round info> +
-Listen sind sehr flexible Datenstrukturen: Sie können als Elemente verschiedene Datentypen (Integers/ganze Zahlen; Strings/Zeichenketten; Boolesche Werte/Wahrheitswerte etc.) enthalten; Elemente können sogar selbst Listen sein: +
-<code python> +
-seltsameliste = ["Anna", 2, "Charly", True, [1, 2, False, "Hallo"]] +
-print(seltsameliste) +
-print(seltsameliste[4]) +
-print(seltsameliste[4][2]) +
-</code> +
-</WRAP> +
- +
-===== Listen erzeugen ===== +
- +
-<WRAP round todo> +
-Verstehe die folgenden Befehle! +
-<code python> +
-zahlen = list(range(10)) +
-print(zahlen) +
-zahlen2 = list(range(10, 30, 3)) +
-print(zahlen2) +
- +
-zahlen3 = [x*x for x in zahlen] +
-print(zahlen3) +
-</code> +
-</WRAP> +
- +
  
 <WRAP round todo> <WRAP round todo>
  • lehrkraefte/snr/informatik/python/listen.1634987347.txt.gz
  • Last modified: 2021/10/23 13:09
  • by Olaf Schnürer