SORTIEREN - Vorkenntnisse

Werbung
Sortieren - Vorkenntnisse
v 1.2
8/2002
SORTIEREN - Vorkenntnisse
Listen
Man kann Listen aus beliebigen Elementen aufbauen. Erkennbar sind sie an den eckigen Klammern. Beispiele: [8,2,4]
oder ['acht','zwei','vier'] oder [8,'II',[1,1,1,1]].
Die Elemente werden durchnummeriert, wobei man mit dem Index 0 beginnt.
Einzelne Elemente erhält man durch Angabe des Index.
Teillisten (genauer: Kopien davon) erhält man durch Slices (Schnitte), die einen Bereich angeben. Liste[a:b] ergibt alle
Elemente von Index a (inklusive) bis Index b (exklusive). Fehlt ein Index, wird der passende Randwert verwendet.
Negative Indizes zählen von rückwärts. Liste[-1] ist das letzte Element.
Die Tatsache, dass der Slice den oberen Indexwert nicht mehr enthält begründet sich darin, dass etwa L[:3]+L[3:]
wiederum die gesamte Liste ergeben soll und die Festlegung auf halboffene Intervalle in ganz Python konsequent
durchgehalten wird.
In den folgenden Beispielen sei L=[7,2,8]
Anweisung
Ergebnis
Beschreibung
L
[7,2,8]
die Liste
L[0]
7
das erste Element
L[len(L)-1]
8
das letzte Element
L[-1]
8
genau das gleiche
[L[0]]
[7]
eine Liste bestehend aus dem ersten Element
L[:1]
[7]
die Liste bis zum ersten Element (vor Index 1)
L[1:]
[2,8]
die Liste ab Index 1, also dem zweiten Element
L[:]
[7,2,8]
eine Kopie der Liste L
L[1:-1]
[2]
die Liste ohne erstes und letztes Element
[L[0]]+L[2:]
[7,8]
Liste aus erstem Element plus Listenrest ab
dem drittem. Es wird also das zweite Element
(Position 1) entfernt
L[:1]+L[2:]
[7,8]
Teilliste aus erstem Element plus Listenrest ab
dem dritten. (vor Index 1 und ab Index 3).
Siehe oben.
Wiederholungsanweisungen:
1.) REKURSION
def zeig(x):
print x
if x >= 4: return
zeig(x+1)
def zeig(x):
print x
if x < 5: zeig(x+1)
Wolfgang Urban, HIB Wien
ein Aufruf zeig(1) zeigt die Zahlen von 1 bis 4
wie oben
1
Sortieren - Vorkenntnisse
v 1.2
2.) WHILE
x = 1
while x<5:
print x
zeigt die Zahlen von 1 bis 4
3.) FOR
for x in [1,2,3,4]:
print x
zeigt die Zahlen von 1 bis 4
8/2002
ZAHLENBEREICHE (ganzzahlig):
range(10)
range(1,10)
range(1,10,3)
range(10,1,-1)
ergibt eine Liste von 10 Zahlen, 0 bis 9. Grund: Offset 0 ist praktisch für Listen-Indizes
ergibt Zahlen ab 1, kleiner als 10. Also [1,2,3,..,8,9]
ergibt Zahlen ab 1, kleiner 10, in Dreierschritten. [1,4,7]
ergibt Zahlen ab 10, abwärts, größer als 1. 1 wird NICHT erreicht. [10,9,8,...,3,2].
praktische Hilfsfunktionen:
def swap(L,a,b):
L[a],L(b) = L[b],L[a]
swap tauscht die zwei Elemente an Position a und
b der Liste L miteinander aus.
def fullrange(von, bis, step=1):
if step>0: return range(von,bis+1,step)
else: return range(von,bis-1,step)
fullrange funktioniert wie range, liefert aber auch
den letzten Wert INKLUSIVE zurück.
Das ist oft brauchbar, etwa in
for x in fullrange(4,8):
print x
zeigt die Zahlen von 4 bis 8
Übungsbeispiele:
1.) eine Funktion soll das n-te Element einer Liste löschen
2.) eine Funktion soll das n-te Element einer Liste an die erste Stelle holen
3.) eine Liste soll umgedreht werden
Beispiellösungen:
1.)def kill(L,n): return L[:n]+L[n+1:]
2.)def fetch(L,n): return [L[n]]+L[:n]+L[n+1:]
3.)def rev(L):
if L==[]: return []
return L[-1:] + rev(L[:-1])
Wolfgang Urban, HIB Wien
2
Sortieren - Vorkenntnisse
v 1.2
8/2002
Zusatz zu 3.) :
untersuche die Ergebnisse interaktiv. Dreht unser reverse die Liste um, oder gibt es die verdrehte Liste zurück (L=....;
rev(L); print L) ? Wie kann man dann die Liste wirklich umdrehen? (Antwort: Liste=rev(Liste))
Info:
obige Funktionen sind übrigens bereits im Befehlsumfang von Python enthalten. Trotzdem ist es aber 1.) eine gute
Übung und 2.) ganz lehrreich zu sehen, wie man komplexe Funktionen aus einfachen Befehlen zusammensetzen kann.
Schließlich ist auch das größte und komplexeste Programm nur eine Aneinanderreihung einfacher Befehle....
Wolfgang Urban, HIB Wien
3
Herunterladen