Mehr Befehle, Methoden und Funktionen für Listen
Mit der Liste kann man jetzt noch mehr machen. Es gibt zum Beispiel eine Funktion, die die Länge einer Liste ermittelt. Nehmen wir noch einmal die Liste mit den 20 zufälligen Würfelzahlen zur Hand.
Das Ergebnis:
20
Okay, du wusstest schon vorher, dass die Liste 20 Elemente hat, aber in vielen Programmen kann die Länge der Liste sich jederzeit ändern. len steht für length – und das bedeutet Länge, also Anzahl der Elemente in einer Liste.
Mit min(liste) kannst du den kleinsten Wert einer Liste ermitteln, mit max(liste) den größten.
print min(zahlenliste)
print max(zahlenliste)
Das Ergebnis sind hier wahrscheinlich die Zahlen 1 und 6 – außer wenn ganz zufällig eine der beiden Zahlen nicht gewürfelt wurde.
Eine praktische Methode für Listen ist auch noch sort(). Sort steht für »sortieren«, und das macht dieser Befehl auch.
sortiert die Reihenfolge der Elemente in der Liste von der kleinsten bis zur größten Zahl.
print zahlenliste
ergibt jetzt
[1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6]
Eine Art »Gegenteil« zu sort ist shuffle: Dieser Befehl (shuffle heißt auf Deutsch »Mischen«) bringt eine Liste völlig zufällig durcheinander. Er gehört aber nicht zu den eingebauten Listenbefehlen, sondern er gehört zum Modul random, das auch sonst alle Zufallszahlenfunktionen enthält.
Mit
random.shuffle(zahlenliste)
wird die eben noch sauber sortierte Liste wieder völlig durcheinandergemischt (nicht vergessen, vorher das Modul random zu importieren!).
Interessant ist auch die Funktion liste.count(wert).
Damit erfährst du, wie oft ein Wert in einer Liste enthalten ist.
print zahlenliste.count(6)
Gibt aus, wie oft die Zahl 6 in der Liste enthalten ist. In diesem Fall: 4 (viermal wurde die 6 gewürfelt).
Damit kannst du ein Programm zum Beispiel 120 Mal würfeln lassen, jeden Wurf an die Liste anhängen und anschließend mit count für die Zahlen von 1 bis 6 auswerten, wie oft jede Zahl gewürfelt wurde. Wie geht das in Python? Versuche es gerne selbst einmal!
import random
zahlenliste = []
repeat 120:
zahl = random.randint(1,6)
zahlenliste.append(zahl)
for wzahl in range (1,7):
print wzahl, ":" , zahlenliste.count(wzahl)
Als Ergebnis erhältst du eine Liste von Würfen mit Anzahlen:
1 : 22
2 : 20
3 : 25
4 : 21
5 : 18
6 : 14
So kann man mit einer Liste also schöne Auswertungen machen.
Wenn man jetzt allerdings nicht 120, sondern vielleicht 100.000 Mal würfeln will, stößt diese Methode an ihre Grenzen, denn dann müsste das Programm zuerst eine Liste mit 100.000 Elementen aufbauen und diese dann 6 Mal komplett durchgehen und auswerten. Das kostet Speicher und vor allem Zeit.
Da wir ja die einzelnen gewürfelten Zahlen und ihre Reihenfolge hinterher auch gar nicht mehr wirklich brauchen, ist es nicht nötig, jede einzelne Zahl zuerst in der Liste zu speichern. Es gibt nämlich noch eine bessere Methode zum Auswerten von vielen Würfelzahlen.
Hierzu verwendest du einfach nur eine ganz kurze Liste mit 6 Elementen. In jedem Element steht 0. Wenn eine 1 gewürfelt wird, wird das erste Element um 1 erhöht, wenn eine 2 gewürfelt wird, das zweite usw. … Dann stehen in der Liste am Ende alle Anzahlen von Würfen von 1 bis 6. Das Programm würde so aussehen:
import random
anzahlen = [0,0,0,0,0,0]
repeat 100000:
zahl = random.randint(1,6)
anzahlen[zahl-1] = anzahlen[zahl-1] + 1
for z in range(6):
print z+1,":",anzahlen[z]
Gezählt wird jede Würfelzahl hier:
anzahlen[zahl-1] = anzahlen[zahl-1] + 1
Warum zahl - 1 ? Weil die Liste ja bei 0 beginnt, die Würfelzahlen aber bei 1. Also werden die Einsen in anzahlen[0] gezählt, die Zweien in anzahlen[1] usw. … Bei der Ausgabe ist es dann umgekehrt: Es wird von 0 bis 5 gezählt, aber es wird immer z+1 ausgegeben.
Du kannst damit jetzt sogar eine Million Würfe auswerten. Viel länger als zwei, drei Sekunden wird das auch nicht dauern.
Neben der append-Methode, die ein Element zu einer Liste hinzufügt, gibt es natürlich auch noch das Gegenteil, die Methode remove (remove = »entfernen«), die ein Listenelement löscht.
anzahlen.remove(0) würde zum Beispiel das erste Element aus der Liste (mit dem Index 0) komplett entfernen. Die Liste hätte dann nur noch 5 Elemente. Wenn ein Element gelöscht wird, rücken die anderen entsprechend nach – anzahlen[1] hätte danach den Index 0 usw.