Commit 5bd00cb4 authored by Mareš Martin's avatar Mareš Martin
Browse files

08: Množiny a slovníky

parent 24b0db21
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[czech]{babel}
\usepackage{palatino}
\usepackage{verbatim}
\usetheme{Warsaw}
\title{Programování 1: Množiny a slovníky}
\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
\def\{{\char123\relax}
\def\}{\char125\relax}
% ----------------------------------------------------------------------
\begin{frame}{Množiny}
\py{%
zvířata = \{"pes", "pes", "kočka", "výr"\}\\
zvířata
}{%
\{'výr', 'pes', 'kočka'\}
}
\py{%
"kočka" in zvířata
}{%
True
}
\py{%
"hroznýš" in zvířata
}{%
False
}
\py{%
set(["a", "b", "c"])
}{%
\{'c', 'b', 'a'\}
}
\py{%
set("abrakadabra")
}{%
\{'r', 'a', 'k', 'b', 'd'\}
}
\py{%
set()
}{%
set() \cmt{(pozor, {\tt \{\}} znamená něco jiného)}
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Operace s množinami}
\py{%
a=set("abrakadabra") \\
b=set("popokatepetl") \\
"".join(sorted(a)) \cmt{(umí se chovat jako seznam)}
}{%
'abdkr'
}
\py{%
k \& b \cmt{(průnik)}
}{%
\{'k', 'a'\}
}
\py{%
a | b \cmt{(sjednocení)}
}{%
\{'r','p','a','e','k','b','o','t','d','l'\}
}
\py{%
a - b \cmt{(rozdíl)}
}{%
\{'r', 'd', 'b'\}
}
\py{%
a.remove("r") \cmt{(odebere prvek)}\\
b.add("b") \cmt{(přidá prvek)}\\
a - b
}{%
\{'d'\}
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Slovníky}
\py{%
teploty = \{ "Praha": 17, "Dillí": 42, "Longyearbyen": -46 \}\\
teploty["Praha"]
}{%
17 \cmt{(klíčem může být každý neměnný typ)}
}
\py{%
teploty["Horní Dolní"] = 11 \\
del teploty["Horní Dolní"] \cmt{(i pro pole)} \\
"Horní Dolní" in teploty
}{%
False
}
\py{%
teploty["Peklo"]
}{%
<chyba KeyError>
}
\py{%
teploty.get("Peklo")
}{%
None
}
\py{%
teploty.get("Peklo", -999)
}{%
-999
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Cyklus přes prvky slovníku}
\py{%
for k in teploty.keys():
\.\>print(k)
}{%
Praha \\
Dillí \\
Longyearbyen
}
\py{%
for v in teploty.values():
\.\>print(v)
}{%
17 \\
42 \\
-46
}
\py{%
for k, v in teploty.items():
\.\>print(f"\{k\} = \{v\}")
}{%
Praha = 17 \\
Dillí = 42 \\
Longyearbyen = -46
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{List comprehension pro množiny a slovníky}
\py{%
\{ x**2 for x in range(5) \}
}{%
\{0, 1, 4, 9, 16\}
}
\py{%
\{ x: x**2 for x in range(5) \}
}{%
\{0: 0, 1: 1, 2: 4, 3: 9, 4: 16\}
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Slovník s~defaulty}
\py{%
from collections import defaultdict \\
počet = defaultdict(int) \\
počet['abc']
}{%
0
}
\py{%
for w in "quick brown fox quick".split():
\.\>počet[w] += 1 \\
list(počet.items())
}{%
[('abc', 0), ('quick', 2), ('brown', 1), ('fox', 1)]
}
\py{%
podle\_délek = defaultdict(list) \\
for w in "quick brown fox".split():
\.\>podle\_délek[len(w)].append(w) \\
list(podle\_délek.items())
}{%
[(5, ['quick', 'brown']), (3, ['fox'])]
}
\end{frame}
% ----------------------------------------------------------------------
\end{document}
SLIDES=08-slovniky.pdf
include ../Makerules
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