NB01_Listen¶
(c) 2025 Technische Hochschule Augsburg - Fakultät für Informatik - Prof.Dr.Nik Klever - Impressum
Listen¶
Listen Methoden¶
Listen-Methoden sind Funktionen, die auf Listen angewendet werden. Methoden sind generell Funktionen die auf Objekte angewandt werden. In der folgenden Auflistung sind die wichtigsten Methoden von Listen aufgelistet, dabei geben die Methoden, die eine Liste nur modifizieren (wie insert, remove, sort o.a.) keinen Wert zurück, sondern nur None. In der Beschreibung von Methoden wird das Objekt (hier in diesem Fall list) vorangestellt und ist damit in der Regel nur ein Platzhalter für eine Variable, die eine Liste enthält oder eine Liste selbst.
list.append(x)
Hinzufügen eines Elements an das Ende der Liste. Äquivalent zu a[len(a):] = [x].
list.extend(L)
Erweitern der Liste mit allen Elementen der angegebenen Liste L. Äquivalent zu a[len(a):] = L.
list.insert(i, x)
Einfügen eines ELements x an der angebenen Position i. Das erste Argument ist die Position (bzw. der Index) desjenigen Elements vor dem das neue Element eingefügt werden soll. Dies bedeutet, dass a.insert(0, x) das Element x vor die Liste anfügt und somit der neue Beginn der Liste wird und a.insert(len(a), x) ist damit äquivalent zu a.append(x).
list.remove(x)
Löscht das erste Element aus der Liste, dessen Wert x ist. Falls kein solches Element existiert, wird eine Fehlermeldung geworfen.
list.pop([i])
Lösche das Element an der angegebenen Position i und gebe den Wert dieses Elements zurück. Falls kein Index angegeben wird, löscht a.pop() das letzte Element der Liste und gibt dieses zurück. (Die eckigen Klammern um i in der oben aufgeführten Methode pop([i]) bedeuten, dass dieses Argument optional ist und nicht das die eckigen Klammern zur Positionsangabe mit angegeben werden müssen. Diese Notation wird sowohl in der Python Dokumentation als auch in anderen Dokumentationen zur Beschreibung eines festgelegten Sachverhalts verwendet und heisst Backus Naur Form bzw. Erweiterte Backus Naur Form.)
list.clear()
Lösche alle Elemente der Liste. Äquivalent zu del a[:].
list.index(x)
Gibt den Index von der ersten Position des Elements zurück, dessen Wert x ist. Falls kein solches Element existiert, wird eine Fehlermeldung geworfen.
list.count(x)
Gibt die Anzahl zurück, wie oft der Wert x in der Liste erscheint.
list.sort(key=None, reverse=False)
Sortiert die Elemente der Liste (die Argumente können für eine angepasste Sortierung verwendet werden, die genaue Bedeutung steht bei der Builtin-Funktion sorted()).
list.reverse()
Kehrt die Reihenfolge der Liste um.
list.copy()
Gibt eine Kopie der Liste zurück. Äquivalent zu a[:].
a = [2, 7, 5, 1, 4, 6, 3]
a.insert(5,3)
print(a)
[2, 7, 5, 1, 4, 3, 6, 3]
%%Mooc StringAssessment
Einfügen in eine Liste
Gegeben sei der folgende Code
a = [2, 7, 5, 1, 4, 6, 3]
Fügen sie das Element 3 in die Liste a nach der 5. Stelle ein
Wie lautet der dazu gehörige Befehl ?
%%Mooc StringAssessment
Zählen der Elemente in einer Liste
Gegeben sei der folgende Code
a = [2, 7, 5, 1, 4, 3, 6, 3]
Umgeben sie den entsprechenden Befehl noch mit einem Print-Befehl
Wie lautet der Befehl um die Anzahl der Elemente 3 auszugeben ?
%%Mooc StringAssessment
Listensortierung 1
Gegeben sei der folgende Code
a = [2, 7, 5, 1, 4, 3, 6, 3]
a.sort()
print(a)
Welches Ergebnis wird durch den print-Befehl ausgegeben ?
%%Mooc StringAssessment
Listensortierung 2
Gegeben sei der folgende Code
a = [2, 7, 5, 1, 4, 3, 6, 3].sort()
print(a)
Geben sie die Antwort so ein, wie die Liste als Ergebnis eines print-Befehls ausgegeben wird
Welches Ergebnis wird durch den print-Befehl ausgegeben ?
Stapelspeicher (Stack) als Beispiel einer Liste¶
In Mikroprozessoren wird der sogenannte Stapelspeicher eingesetzt, ein spezielles Register um z.B. die Rücksprungadressen von Funktionen abzulegen. Einen Stapelspeicher kann man sich vereinfacht als Stapel von z.B. Bierkisten vorstellen. Es kann immer nur eine neue Bierkiste oben auf den Stapel gepackt werden oder eine Bierkiste von oben heruntergenommen werden. Man kann also immer nur auf die oberste Bierkiste zugreifen und nicht auf die weiter unter im Stapel liegenden Bierkisten. Das Hinzulegen eines Objekt auf den Stapel wird push genannt und das Wegnehmen eines Objekts vom Stapel wird pop genannt. Das Prinzip des Stapelspeichers wird auch als Last-In - First-Out (LIFO) bezeichnet, umgangssprachlich übersetzt: was zuletzt reinkommt, kommt zuerst raus. Eine Liste kann nun mit den beiden Methoden append (welches push entspricht) und pop als Stapelspeicher fungieren:
stapelspeicher = ['eins', 'zwei', 'drei']
stapelspeicher.append('vier')
stapelspeicher.append('fünf')
print(stapelspeicher)
['eins', 'zwei', 'drei', 'vier', 'fünf']
letzterWert = stapelspeicher.pop()
print(letzterWert)
fünf
print(stapelspeicher)
['eins', 'zwei', 'drei', 'vier']
letzterWert = stapelspeicher.pop()
print(letzterWert)
vier
letzterWert = stapelspeicher.pop()
print(letzterWert)
drei
stapelspeicher.append('sechs')
print(stapelspeicher)
['eins', 'zwei', 'sechs']
%%Mooc StringAssessment
Stapelspeicher - Türme von Hanoi
Gegeben seien die folgenden drei Stapel
s1 = [3, 2, 1]
s2 = []
s3 = []
Die entsprechenden Scheiben 3, 2, 1 auf dem Stab 1 sollen auf den Stab 3 umgesetzt werden, dabei darf eine kleinere Scheibe nur auf einer größeren Scheibe zu liegen kommen. Allerdings darf die Umsetzung mit Hilfe des Stabs 2 durchgeführt werden. Die ersten 3 Umsetzungen lauten daher:
s3.append(s1.pop())
s2.append(s1.pop())
s2.append(s3.pop())
Geben sie die Antwort hintereinander mit jeweils einem Semikolon getrennt ein.
Wie lauten die weiteren 4 Befehle zum Umsetzen der Türme?
Warteschlange (Queue) als Beispiel einer Liste¶
Eine Warteschlange kann man sich als Warteschlange vor einer Bäckereitheke verdeutlichen, der erste in der Schlange wird zuerst bedient, der letzte in der Schlange wird als letzter bedient. Im Gegensatz zu einem Stapelspeicher ist daher das Konzept einer Warteschlange das First-In, First-Out (FIFO)-Prinzip. Warteschlangen werden z.B. in der Datenkommunikation benutzt um die ausgehenden oder ankommenden Datenpakete zu verarbeiten. Auch eine Liste kann als Warteschlange eingerichtet werden. Listen sind dennoch nicht effizient für dieses Prinzip, während nämlich append und pop für den Stapelspeicher jeweils das letzte Element der Liste bearbeiten und damit ziemlich schnell und effizient durchgeführt wird, muss das append und pop für die Warteschlange jeweils das erste Element der Liste bearbeiten und dies ist - infolge des Verschiebens aller weiteren Elemente der Liste um eine Stelle - ziemlich langsam und wenig effizient. Es gibt jedoch in der Bibliothek collections eine Objektklasse deque, die genau für das Prinzip Warteschlange sehr effektiv für append, appendleft sowie pop und popleft an beiden Enden der Liste gestaltet und entwickelt worden. Eine Warteschlange ist somit wie folgt umsetzbar:
from collections import deque
queue = deque(["eins", "zwei", "drei"])
print(queue)
deque(['eins', 'zwei', 'drei'])
queue.append("vier")
queue.append("fünf")
print(queue)
deque(['eins', 'zwei', 'drei', 'vier', 'fünf'])
ersterWert = queue.popleft()
print(ersterWert)
eins
ersterWert = queue.popleft()
print(ersterWert)
zwei
print(queue)
deque(['drei', 'vier', 'fünf'])
%%Mooc StringAssessment
Warteschlangen in der Datenkommunikation
Gegeben seien die folgenden beiden Queues
sender = deque([1, 2, 3, 4])
empfaenger = deque([])
Es sollen die Daten-Pakete 1,2,3,4 der Reihe nach vom Sender zum Empfänger geschickt werden. Wie würde eine Funktion send mit den beiden Argumenten sender und empfaenger lauten, die bei jedem Aufruf ein Paket vom sender zum empfaenger schickt und als Rückgabewert die Paketnr zurückgibt
paketnr = 0
def send(sender,empfaenger):
global paketnr
if len(sender):
...
paketnr += 1
return paketnr
Geben sie als Antwort den Befehl ein, der in der Zeile mit den 3 Punkten (...) stehen muss. Nach dem Versenden aller Pakete (also nach dem 4-maligen Aufruf von send sollten die beiden Queues folgendermaßen aussehen:
sender = deque([])
empfaenger = deque([1, 2, 3, 4])
Wie lautet der Befehl ein Datenpaket von der Sendequeue zur Empfängerqueue zu schicken?
Der del Ausdruck¶
Allgemeines¶
Die List-Methode remove(x) löscht nur das erste Vorkommen des Listen-Elements x. Es gibt jedoch mit dem del-Ausdruck (del steht für delete (löschen)) die Möglichkeit, Elemente mit ihrem Index aus einer Liste zu löschen. Dabei ist der del-Ausdruck umfangreicher, da er auch Slices einer Liste oder selbst den gesamten Inhalt einer Liste löschen kann. Hier ein Beispiel dazu:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del a[0]
print(a)
del a[2:4]
print(a)
del a[:]
print(a)
[2, 3, 4, 5, 6, 7, 8, 9, 10] [2, 3, 6, 7, 8, 9, 10] []
Löschen von Variablen¶
Der del-Ausdruck kann auch zum Löschen von Variablen benutzt werden, diese sind anschliessend nicht mehr verfügbar und die Verwendung dieser Variablen führt dann zu einem Fehler.
del a
print(a)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-22-c5a4f3535135> in <module>() ----> 1 print(a) NameError: name 'a' is not defined
%%Mooc Video
Weitere Literatur¶
%%Mooc WebReference
More on Lists
https://docs.python.org/3/tutorial/datastructures.html#more-on-lists
Hinweis: erweiterte Betrachtung von Listen
%%Mooc WebReference
The del statement
https://docs.python.org/3/tutorial/datastructures.html#the-del-statement
Hinweis: Der del Ausdruck
%%Mooc WebReference
Wikipedia: Erweiterte Backus-Naur-Form
https://de.wikipedia.org/wiki/Erweiterte_Backus-Naur-Form
Hinweis: Beschreibung der erweiterten Backus-Naur-Form