Commit e992d97c authored by Mareš Martin's avatar Mareš Martin
Browse files

07: List comprehensions

parent 1bd053d0
\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}
SLIDES=07-compr.pdf
include ../Makerules
def deleni(x, y):
return x//y, x%y
podil, zbytek = deleni(1000, 7)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment