Skip to content

Commit

Permalink
add nesting to comprehensions
Browse files Browse the repository at this point in the history
This should close issue fsr#18
  • Loading branch information
Deric-W committed Oct 15, 2021
1 parent e5a217b commit 6f10526
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
11 changes: 11 additions & 0 deletions latex/slides/06_comprehensions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
22 changes: 22 additions & 0 deletions latex/slides/resources/06_comprehensions/nesting.py
Original file line number Diff line number Diff line change
@@ -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]
39 changes: 39 additions & 0 deletions md/06_comprehensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -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]
```

0 comments on commit 6f10526

Please sign in to comment.