9.3.1. List-Comprehensions (A)#
Ein Beispiel:
numbers = list(range(10))
squares = [x*x for x in numbers]
print(f'numbers: {numbers}')
print(f'squares: {squares}')
numbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
squares: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Wir erzeugen erst eine Liste numbers und transformieren diese in eine neue Liste aus Quadratzahlen.
Dieser Code wird durch den Python-Interpreter in folgenden Code übersetzt:
numbers = list(range(10))
squares = []
for x in numbers:
squares.append(x*x)
print(f'numbers: {numbers}')
print(f'squares: {squares}')
numbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
squares: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
x*x ist eine anonyme Funktion in Kurzschreibweise.
Wir können dies explizit verdeutlichen:
def square(x):
return x*x
numbers = list(range(10))
squares = [square(x) for x in numbers]
print(f'numbers: {numbers}')
print(f'squares: {squares}')
numbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
squares: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Wir können die Liste der Elemente der Ursprungsliste auch durch eine Fallunterscheidung filter:
def square(x):
return x*x
numbers = list(range(10))
odd_squares = [square(x) for x in numbers if x % 2 == 1]
print(f'numbers: {numbers}')
print(f'squares: {odd_squares}')
numbers: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
squares: [1, 9, 25, 49, 81]
Wir können auch mehrere Sequenzen kombinieren. Folgender Code
numbers = [i + j for i in range(5) for j in range(2)]
print(f'numbers: {numbers}')
numbers: [0, 1, 1, 2, 2, 3, 3, 4, 4, 5]
entspricht
numbers =[]
for i in range(5):
for j in range(2):
numbers.append(i + j)
print(f'numbers: {numbers}')
numbers: [0, 1, 1, 2, 2, 3, 3, 4, 4, 5]
Lassen Sie uns damit eine Matrix \(A\) mit
\[\begin{split}
A = \begin{pmatrix}
0+0 & 0+1 & 0+2 & \ldots & 0+(n-1)\\
1+0 & 1+1 & 1+2 & \ldots & 1+(n-1)\\
\vdots & \vdots & \vdots & \vdots\\
(m-1) + 0 & (m-1) + 1 & (m-1) + 2 & \ldots & (m-1)+(n-1)
\end{pmatrix}
\end{split}\]
als Liste von Listen generieren:
n = 3
m = 4
A = [[(i+j) for i in range(m)] for j in range(m)]
print(f'Matrix A: {A}')
Matrix A: [[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]