diff --git a/latex/slides/06_comprehensions.tex b/latex/slides/06_comprehensions.tex index e0cb20a..7d07db2 100644 --- a/latex/slides/06_comprehensions.tex +++ b/latex/slides/06_comprehensions.tex @@ -76,6 +76,17 @@ \section{Generators} \lstinputlisting{resources/06_comprehensions/generators.py} \end{frame} +\section{Nesting} +\begin{frame}{Nesting} + \alert{\texttt{for}} Schleifen in Comprehensions können verschachtelt werden. + Dabei werden sie von Links nach Rechts ausgeführt, was man bei Variablen beachten muss. + + \textbf{Wichtig:} Starke Verschachtelung verringert die Lesbarkeit! +\end{frame} + +\begin{frame}{Nesting - Beispiel} + \lstinputlisting{resources/06_comprehensions/nesting.py} +\end{frame} %\section{Misc} %\begin{frame}{Misc} diff --git a/latex/slides/resources/06_comprehensions/nesting.py b/latex/slides/resources/06_comprehensions/nesting.py new file mode 100644 index 0000000..ff744c5 --- /dev/null +++ b/latex/slides/resources/06_comprehensions/nesting.py @@ -0,0 +1,22 @@ +# erzeugt eine Liste welche jede Zahl n +# von 0 bis 4 (4 nicht enthalten) n mal enthält +list1 = [i for i in range(4) for _ in range(i)] + +# gleicher Code ohne Comprehension +list2 = [] +for i in range(4): + for _ in range(i): + l.append(i) + +list1 == list2 == [1,2,2,3,3,3] + +# löst einen NameError aus, weil +# a erst durch die zweiten Schleife entsteht +[i for i in range(a) for a in range(i)] + +# zählt für jede Zahl n von 0 bis 4 (4 nicht enthalten) +# von 0 bis n-1, weil EXPRESSION erst nach der letzten +# Schleife evaluiert wird +list3 = [a for i in range(4) for a in range(i)] + +list3 == [0,0,1,0,1,2] diff --git a/md/06_comprehensions.md b/md/06_comprehensions.md index f3ef6c9..55cabdd 100644 --- a/md/06_comprehensions.md +++ b/md/06_comprehensions.md @@ -138,3 +138,42 @@ for number in generator: for number in (i for i in range(2**32)): print(number) ``` + + +# Nesting + +## Nesting + +`for` Schleifen in Comprehensions können verschachtelt werden. +Dabei werden sie von Links nach Rechts ausgeführt, was man bei Variablen beachten muss. + +**Wichtig:** Starke Verschachtelung verringert die Lesbarkeit! + +--- + +## Beispiel + +```python +# erzeugt eine Liste welche jede Zahl n +# von 0 bis 4 (4 nicht enthalten) n mal enthält +list1 = [i for i in range(4) for _ in range(i)] + +# gleicher Code ohne Comprehension +list2 = [] +for i in range(4): + for _ in range(i): + l.append(i) + +list1 == list2 == [1,2,2,3,3,3] + +# löst einen NameError aus, weil +# a erst durch die zweiten Schleife entsteht +[i for i in range(a) for a in range(i)] + +# zählt für jede Zahl n von 0 bis 4 (4 nicht enthalten) +# von 0 bis n-1, weil EXPRESSION erst nach der letzten +# Schleife evaluiert wird +list3 = [a for i in range(4) for a in range(i)] + +list3 == [0,0,1,0,1,2] +```