diff --git a/07-compr/07-compr.tex b/07-compr/07-compr.tex
new file mode 100644
index 0000000000000000000000000000000000000000..496d4370d3d04be031efdc45f672c18327440128
--- /dev/null
+++ b/07-compr/07-compr.tex
@@ -0,0 +1,199 @@
+\documentclass{beamer}
+\usepackage[utf8]{inputenc}
+\usepackage[czech]{babel}
+\usepackage{palatino}
+\usepackage{verbatim}
+\usetheme{Warsaw}
+\title{Programování 1: List comprehensions}
+\author[Martin Mareš]{Martin Mareš\\\texttt{mj@ucw.cz}}
+\institute{Katedra Aplikované Matematiky\\MFF UK Praha}
+\date{2019}
+\begin{document}
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{footline}{}
+\setbeamerfont{title page}{family=\rmfamily}
+\shorthandoff{"}
+
+\begin{frame}
+\titlepage
+\end{frame}
+
+\input ../slidemac.tex
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Odbočka: n-tice (tuples)}
+
+\py{%
+t = (1, 2, 3) \cmt{(vytváříme trojici)} \\
+t[1] \cmt{(fungují běžné operace se seznamy)}
+}{%
+2
+}
+
+\py{%
+t[0] = 0
+}{%
+<chyba>  \cmt{(n-tice nelze měnit)}
+}
+
+\py{%
+list(t)
+}{%
+[1, 2, 3]  \cmt{(převedení n-tice na seznam)}
+}
+
+\py{%
+tuple([4, 5])
+}{%
+(4, 5)  \cmt{(nebo seznamu na n-tici)}
+}
+
+\py{%
+s = 11, 22, 33 \\
+s  \cmt{(více hodnot oddělených čárkou utvoří n-tici)}
+}{%
+(11, 22, 33)
+}
+
+\py{%
+a, b, c = s \\
+b  \cmt{(přiřazení každého prvku n-tice/seznamu zvlášť)}
+}{%
+22
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Příklad: Funkce s více výsledky}
+
+\verbatiminput{deleni.py}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{List comprehension}
+
+\py{%
+seznam=[11, 12, 13, 14, 15]\\
+[a**2 for a in seznam]
+}{%
+[121, 144, 169, 196, 225]
+}
+
+\py{%
+[a**2 for a in seznam if a\%2 == 1]
+}{%
+[121, 169, 225]
+}
+
+\py{%
+[(a,b) for a in [1,2,3] for b in [5,6]]
+}{%
+[(1,5), (1,6), (2,5), (2,6), (3,5), (3,6)]
+}
+
+\py{%
+[(a,b) for a in range(4) for b in range(4) if a<b]
+}{%
+[(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)]
+}
+
+\py{%
+věta="Kobyla má malý bok" \\
+[len(slovo) for slovo in věta.split()]
+}{%
+[6, 2, 4, 3]
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{List comprehension: Další triky}
+
+\py{%
+[int(s) for s in input().split()] \\
+1 2 3 4 5   \cmt{(načtení seznamu čísel na jednom řádku)}
+}{%
+[1, 2, 3, 4, 5]
+}
+
+\py{%
+s=[[1, 2, 3], [4, 5]] \\
+[x for t in s for x in t]
+}{%
+[1, 2, 3, 4, 5]  \cmt{(\uv{zploštění} seznamu)}
+}
+
+\py{%
+m=[[0]*5 for \_ in range(3)] \\
+m  \cmt{(výroba matice: seznam 3 různých seznamů nul)}
+}{%
+[[0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0]]
+}
+
+\py{%
+n=[[1, 2, 3], [4, 5, 6]] \\
+[[r[i] for r in n] for i in range(3)]
+}{%
+[[1,4], [2,5], [3,6]]  \cmt{(transpozice matice)}
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\begin{frame}{Agregační funkce}
+
+\py{%
+s = [2**x \% 37 for x in range(10)] \\
+s
+}{%
+[1, 2, 4, 8, 16, 32, 27, 17, 34, 31]
+}
+
+\py{%
+min(s)
+}{%
+1
+}
+
+\py{%
+max(s)
+}{%
+34
+}
+
+\py{%
+sum(s)
+}{%
+172
+}
+
+\py{%
+all([x < 37 for x in s])
+}{%
+True  \cmt{(and přes všechny prvky seznamu)}
+}
+
+\py{%
+any([x > 33 for x in s])
+}{%
+True  \cmt{(or přes všechny prvky seznamu)}
+}
+
+\py{%
+sorted(s)
+}{%
+[1, 2, 4, 8, 16, 17, 27, 31, 32, 34]
+}
+
+\end{frame}
+
+% ----------------------------------------------------------------------
+
+\end{document}
diff --git a/07-compr/Makefile b/07-compr/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..fc4966b56c0d447a90054aeb295cd0389a7ada43
--- /dev/null
+++ b/07-compr/Makefile
@@ -0,0 +1,3 @@
+SLIDES=07-compr.pdf
+
+include ../Makerules
diff --git a/07-compr/deleni.py b/07-compr/deleni.py
new file mode 100644
index 0000000000000000000000000000000000000000..31e78a1a2b77c0c66a1f90e9c74a736e13299801
--- /dev/null
+++ b/07-compr/deleni.py
@@ -0,0 +1,4 @@
+def deleni(x, y):
+    return x//y, x%y
+
+podil, zbytek = deleni(1000, 7)