Commit cc05ad37 authored by cermak's avatar cermak
Browse files

Lesson 7

parent 5d1c33c2
Pipeline #19237 passed with stage
in 1 minute and 36 seconds
...@@ -90,5 +90,5 @@ ...@@ -90,5 +90,5 @@
"markdown" "markdown"
], ],
"python.pythonPath": "C:\\Anaconda3\\envs\\py39\\python.exe", "python.pythonPath": "C:\\Anaconda3\\envs\\py39\\python.exe",
"python.dataScience.jupyterServerURI": "local" "jupyter.jupyterServerType": "local"
} }
\ No newline at end of file
\documentclass{beamer} \documentclass{beamer}
\title{Programování 1: List comprehensions} \title{Programování 1.7: Dictionaries/Slovníky}
\input ../slidemac.tex \input ../slidemac.tex
...@@ -13,116 +13,154 @@ ...@@ -13,116 +13,154 @@
\shorthandoff{"} \shorthandoff{"}
% ----------------------------------------------------------------------
\begin{frame}{Odbočka: n-tice (tuples)} % ----------------------------------------------------------------------
\py{% \begin{frame}{Slovníky}
t = (1, 2, 3) \cmt{(vytváříme trojici)} \\
t[1] \cmt{(fungují běžné operace se seznamy)}
}{%
2
}
\py{% \py{%
t[0] = 0 teploty = \{ "Praha": 17, "Dillí": 42, "Longyearbyen": -46 \}\\
teploty["Praha"]
}{% }{%
<chyba> \cmt{(n-tice nelze měnit)} 17
} }
\py{% \py{%
list(t) teploty["Horní Dolní"] = 11 \\
del teploty["Horní Dolní"] \cmt{(i pro pole)} \\
"Horní Dolní" in teploty
}{% }{%
[1, 2, 3] \cmt{(převedení n-tice na seznam)} False
} }
\py{% \py{%
tuple([4, 5]) teploty["Peklo"]
}{% }{%
(4, 5) \cmt{(nebo seznamu na n-tici)} <chyba KeyError>
} }
\py{% \py{%
s = 11, 22, 33 \\ teploty.get("Peklo")
s \cmt{(více hodnot oddělených čárkou utvoří n-tici)}
}{% }{%
(11, 22, 33) None
} }
\py{% \py{%
a, b, c = s \\ teploty.get("Peklo", -999)
b \cmt{(přiřazení každého prvku n-tice/seznamu zvlášť)}
}{% }{%
22 -999
} }
\end{frame} \end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Příklad: Funkce s více výsledky} \begin{frame}{Cyklus přes prvky slovníku}
\pycode{deleni.py} \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} \end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Příklad: Zipování seznamů} \begin{frame}{List comprehension pro množiny a slovníky}
\py{% \py{%
x = [1, 2, 3]\\ [ x**2 for x in range(5) ]
y = ["a", "b", "c"]\\
list(zip(x, y))
}{% }{%
[(1, 'a'), (2, 'b'), (3, 'c')] [0, 1, 4, 9, 16] \cmt{(list)}
} }
\py{% \py{%
for i, j in zip(x, y):\\ \{ x**2 for x in range(5) \}
\>print(i, j)
}{% }{%
1 a\\ \{0, 1, 4, 9, 16\} \cmt{(set)}
2 b\\ }
3 c
\py{%
\{ x: x**2 for x in range(5) \}
}{%
\{0: 0, 1: 1, 2: 4, 3: 9, 4: 16\} \cmt{(dict)}
} }
\end{frame} \end{frame}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{List comprehension} \begin{frame}{Pár triků}
Funkce s více výsledky pomocí tuple
\pycode{deleni.py}
Prázdné sety vs. slovníky
\py{% \py{%
seznam=[11, 12, 13, 14, 15]\\ type(\{ 1 \})
[a**2 for a in seznam]
}{% }{%
[121, 144, 169, 196, 225] <class 'set'>
} }
\py{% \py{%
[a**2 for a in seznam if a\%2 == 1] type(\{\})
}{% }{%
[121, 169, 225] <class 'dict'>
} }
\py{% \py{%
[(a,b) for a in [1,2,3] for b in [5,6]] type(type(set()))
}{% }{%
[(1,5), (1,6), (2,5), (2,6), (3,5), (3,6)] <class 'dict'>
} }
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Příklad: Zipování seznamů}
\py{% \py{%
[(a,b) for a in range(4) for b in range(4) if a<b] x = [1, 2, 3]\\
y = ["a", "b", "c"]\\
list(zip(x, y))
}{% }{%
[(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)] [(1, 'a'), (2, 'b'), (3, 'c')]
} }
\py{% \py{%
věta="Kobyla má malý bok" \\ for i, j in zip(x, y):\\
[len(slovo) for slovo in věta.split()] \>print(i, j)
}{% }{%
[6, 2, 4, 3] 1 a\\
2 b\\
3 c
} }
\end{frame} \end{frame}
...@@ -212,4 +250,43 @@ sorted(s) ...@@ -212,4 +250,43 @@ sorted(s)
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
\begin{frame}{Závěrem}
\begin{itemize}
\item Klíčem může být libovolný immutable typ (třeba číslo, řetězec či tuple,
ale ne seznam nebo množina).
\item Operace s~jednotlivými prvky běží v~konstantním čase (aspoň průměrně).
\item Operace s~celou množinou běží v~lineárním čase.
\item Shrnutí:
\begin{itemize}
\item Tuple ... static array
\item List ... dynamical array
\item Dictionary ... hash table
\item Set ... Dictionary bez hodnot
\end{itemize}
\end{itemize}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Úkoly na hodinu}
\begin{itemize}
\item vytvoří tabulku násobilky (a×b pro všechna a, b od 1 do daného čísla)
\item zjistí průnik dvou (neuspořádaných) seznamů
\item vybere z textu slova, která jsou palindromická (např. kajak)
\item spočítá skalární součin dvou vektorů
\item seřadí slova na řádku podle jejich délky (hint: (1) slova převést na dvojice (délka, slovo), (2) setřídit, (3) vypsat slova)
\end{itemize}
\pycode{ukoly_template.py}
\end{frame}
% ----------------------------------------------------------------------
\end{document} \end{document}
def nasobilka(n):
def prunik_seznamu(x, y):
def palindromy(text):
def skalarni_soucin(x, y):
def slova_podle_delky(radek):
\ No newline at end of file
...@@ -99,95 +99,6 @@ a - b ...@@ -99,95 +99,6 @@ a - b
\end{frame} \end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Slovníky}
\py{%
teploty = \{ "Praha": 17, "Dillí": 42, "Longyearbyen": -46 \}\\
teploty["Praha"]
}{%
17
}
\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}
% ---------------------------------------------------------------------- % ----------------------------------------------------------------------
......
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