lehrkraefte:blc:informatik:ffprg1-2019:arrays-lists

Listen vs. Arrays

Listen und Arrays sind Variablen, die mehrere Werte auf einmal enthalten. Einzelne Werte werden mit eckigen Klammern über Indizies angesprochen, die jeweils von 0 bis $n-1$ laufen (bei total $n$ Elementen).

Der unmittelbare Inhalt von Listen ist unveränderbar, bei Arrays veränderbar.

a = (0,1,4,9,16,25)  # Liste mit 6 Elementen
b = [2,3,5,7,11,17]  # Array mit 6 Elementen
 
print a[3]  # Ergibt 9, das vierte Element
print b[3]  # Ergibt 7
b[3]=77
print b[3]  # Ergibt 77
 
for i in a:    # i nimmt nacheinander die Werte 0,1,4,9,16,25 an
  print(i)
 
for i in b:    # i nimmt nacheinander die Werte 2, 3, 5, 77, 11, 17 an
  print(i)
 
a[3] = 99   # Fehler! Inhalt der Liste kann nicht veraendert werden.
# Mit einer for-Schlaufe
w = []    # Leeres Array
for i in range(11):
  w.append(i*i*i)            # Am Schluss des Arrays ein neues Element anhängen
 
print(w)  # [0, 1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
 
 
# The fancy way:
q = [i*i for i in range(11)]   # Quadratzahlen von 0 bis 100
print(q)    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Erzeugen Sie ein Array der Länge $n$ (z.B. 20) so, dass das erste Element 0, das zweite 1, und jedes folgende Element die Summe der beiden vorhergehenden ist. Die Länge $n$ soll sich ganz einfach im Code anpassen lassen. Für $n=20$ sollte das Resultat

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]

sein.

Lösungsvorschlag

Lösungsvorschlag

n = 20
fib = [0,1]
for i in range(2,n):
  fib.append(fib[i-2]+fib[i-1])
print(fib)

Der Quotient nähert sich $\frac{1}{\varphi}$, dem Kehrwert des Golden Schnitts, positive Lösung der Gleichung $1:x = x:(1-x)$. $\varphi$ ist auch als die “irrationalste” Zahl bekannt. D.h. um die Zahl mit gegebener Präzision durch eine Bruchzahl anzunähern ist Nenner grösser als für andere irrationale Zahlen.

Erzeugen Sie daraus ein Array der Länge $n-1$, das die Quotienten zweier aufeinanderfolgenden Einträge vom obigen Array enthält. Resultat:

[0.0, 1.0, 0.5, 0.6666666666666666, 0.6, 0.625, 0.6153846153846154, 0.6190476190476191, 0.6176470588235294, 0.6181818181818182, 0.6179775280898876, 0.6180555555555556, 0.6180257510729614, 0.6180371352785146, 0.6180327868852459, 0.6180344478216818, 0.6180338134001252, 0.6180340557275542, 0.6180339631667066]

Wissen Sie, welcher Zahl sich diese Folge nähert?

Lösungsvorschlag

Lösungsvorschlag

n = 20
fib = [0,1]
for i in range(2,n):
  fib.append(fib[i-2]+fib[i-1])
print(fib)
 
quotients = []
for i in range(1,n):  # Achtung: es gibt nur n-1 Quotienten!
  quotients.append(fib[i-1]/fib[i])
 
print(quotients)

Erzeugen Sie ein Array mit den ersten $n$ (z.B. 100) Primzahlen.

Bonus: Benutzen Sie das teilweise erstellte Array von Primzahlen, um effizienter die Primalität weiterer Kandidaten festestellen zu können.

Erzeugen Sie ein Array mit $n$ Einträgen, die alle True sein sollen, ausser die Einträge mit den Indizies 0 und 1 sollen False sein.

Setzen Sie dann jeden zweiten Eintrag (ab Index 4) auf False (weil nicht prim).

Dann jeden dritten Eintrag (ab Index $9=3\cdot 3$) auf False (weil nicht prim).

Dann jeden fünften Eintrag (ab Index 25), etc.

Dand jeden $p$-ten Eintrag (ab Index $p^2$), wobei $p$ eine Primzahl ist.

Am Schluss erhalten Sie ein Array, das für jeden Index angibt, ob der Index prim ist oder nicht.

Ein mehrdimensionales Arrays ist einfach ein Array, das als Element wieder Arrays enthält.

  a = [[1,22],[333,4444]]
  print(a[0])   # [1, 22]
  print(a[0][0]) # 1
  print(a[1][1]) # 4444
 
  # Multiplikationstabelle, Fancy:
  tabelle = [[i*j for i in range(0,11)] for j in range(0,11)]
 
  print(tabelle[7])  # 7ner Reihe
  print(tabelle[9][6])  # 54
 
  • lehrkraefte/blc/informatik/ffprg1-2019/arrays-lists.txt
  • Last modified: 2019/02/26 10:02
  • by Ivo Blöchliger