Arrays und Tuples
- Tuples: Wird mit runden Klammern geschrieben, Liste und direkter Inhalt können nicht verändert werden.
- Array/Liste: Wird mit eckigen Klammern geschrieben. Kann verändert werden (Länge und Inhalt).
- Zugriff bei beiden via eckige Klammern, z.B. a[4], Index von 0 bis Anzahl Elemente minus 1.
Wo möglich, mit Tuples arbeiten. Ist in vielen Fällen effizienter (Zeit und Speicher).
a = (1,4,9,16) # Tuple b = [1,4,9,16] # Array/Liste print(a[2]) # Liefert 9 b[2]=8 # Eintrag kann verändert werden print(b) a[2]=8 # Fehler bei der Ausführung, Tuple kann nicht verändert werden.
Wichtige Funktionen und Methoden
len
: Anzahl Element einer Liste/Array, z.B.len(a)
wenn a ein Array enthält.- Negative Indexe:
a[-1]
→a[len(a)-1]
(letztes Element),a[-2]
ist zweitletztes Element etc. - Unterliste/Array mit
a[2:4]
→ Liste/Array mit den Elementena[2]
unda[3]
(gleiche Logik wie bei range) - Unterliste/Array mit
a[2:10:2]
→ Liste/Array mit den Elementen der Indizies 2,4,6 und 8.a[Untergrenze:Obergrenze:Schrittweite]
. - Array/Liste «umdrehen»:
a[::-1]
(Letztes Element an erster Stelle etc.) - Anfang
a[:3]
→a[0:3]
, Endea[5:]
→a[5:len(a)]
Nur für Arrays:
a.append(5)
→ zusätzliches Element hinten anfügentuple(a)
→ Konvertiert ein Array in ein Tuple
Weitere nützliche Methoden: https://www.w3schools.com/python/python_ref_list.asp
Mehrdimensionale Arrays/Listen
dirs = ((1,0), (0,1), (-1,0), (0,-1)) print dirs[1][1] # Zweite Komponente vom zweiten Array, liefert 1 for d in dirs: print("Vektor (%d, %d)" % d)
Erzeugung von Arrays
quadrate = [i**2 for i in range(20)] print(quadrate) feld = [ [x*y for y in range(1,4)] for x in range(1,4) ] print(feld)
Loop über Arrays
quadrate = [i**2 for i in range(1,9)] # Loop über alle Elemente for q in quadrate: print("%d ist eine Quadratzahl" % q) # Loop mit Index über alle Elemente for i,q in enumerate(quadrate): print("quadrate[%d]=%d" % (i,q))
Aufgaben
Array-Rätsel
Geben ist folgendes Array:
- array.py
a = [58, 64, 2, 79, 92, 46, 80, 54, 50, 86, 72, 50, 84, 37, 76, 84, 14, 60, 99, 65, 66, 47, 28, 48, 38, 51, 17, 51, 6, 73, 20, 5, 83, 15, 43, 76, 93, 53, 65, 15, 91, 64, 86, 1, 63, 82, 96, 96, 35, 62, 37, 55, 51, 39, 96, 5, 24, 31, 23, 45, 75, 100, 81, 57, 67, 1, 55, 21, 80, 77, 89, 13, 75, 7, 49, 28, 31, 30, 41, 1, 57, 58, 75, 42, 14, 47, 64, 59, 9, 95, 59, 68, 74, 60, 99, 93, 39, 38, 65, 24]
Gesucht sind folgende Dinge (wenn es mehrere Lösungen geben sollte, ist immer nur die erste auszugeben)
- Position und Wert des kleinsten und grössten Elements
- Position und Länge der längsten Sequenz strikt aufsteigender Zahlen
- Position und Länge der längsten Sequenz ungerader Zahlen
Minimum 1 bei Index 43 Maximum 100 bei Index 61 Aufsteigende Sequenz mit Länge 4, Start bei 33, Sequenz [15, 43, 76, 93] Ungerade Sequenz mit Länge 6, Start bei 62, Sequenz [81, 57, 67, 1, 55, 21]
Fibbonacci-Zahlen
- Erzeugen Sie ein Array mit gegebener Länge mit den Fibbonacci-Zahlen: [0,1,1,2,3,5,8,13,21,34,…]
- Bilden Sie auf dem Array mit den Fibbonacci-Zahlen ein Array mit den Quotienten zweier aufeinanderfolgenen Fibbonacci-Zahlen
Pascal-Dreieck
- Erzeugen Sie ein zweidimensionales Array mit dem Pascal-Dreieck.
- Challenge: Geben Sie dieses “schön” aus (wie unten):
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1], [1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]] 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1