Commit d9dbbbb0 authored by cermak's avatar cermak
Browse files

lesson 6

parent 91d5bac3
Pipeline #18100 passed with stage
in 3 minutes and 27 seconds
......@@ -88,5 +88,7 @@
"emmet.excludeLanguages": [
"markdown"
]
],
"python.pythonPath": "C:\\Anaconda3\\envs\\py39\\python.exe",
"python.dataScience.jupyterServerURI": "local"
}
\ No newline at end of file
......@@ -15,7 +15,7 @@
% ----------------------------------------------------------------------
\begin{frame}{Řez seznamem}
\begin{frame}{List Slicing / Řezy seznamem}
\py{%
x = [11, 22, 33, 44, 55, 66, 77] \\
......@@ -37,7 +37,7 @@ x[5:]
}
\py{%
x[:]
x[:] \cmt{(x.copy() je univerzálnější)}
}{%
[11, 22, 33, 44, 55, 66, 77] \cmt{(kopie seznamu)}
}
......@@ -93,51 +93,84 @@ x
}
\py{%
help(x) \cmt{(vypíše dostupné operace)}
x.extend([16, 20]) \cmt{(přidá iterable)} \\
x
}{%
[2, 42, 3, 4, 16, 20]
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Generátorové notace / List comprehension}
Je to rychlé a přehledné
\py{%
help([]) \cmt{(totéž)}
a = [x*x for x in range(10)] \\
a
}{%
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
}
\end{frame}
% ----------------------------------------------------------------------
\py{%
a = [x for x in range(50) if x \% 7 == 0] \\
a
}{%
[0, 7, 14, 21, 28, 35, 42, 49]
}
\begin{frame}{Použití řezů}
Lze i pro sety (unikátní list):
\py{%
x = [11, 22, 33, 44, 55, 66, 77] \\
x[:3] + x[4:]
a = \{x for x in range(50) if x \% 7 == 0\} \\
a
}{%
[11, 22, 33, 55, 66, 77] \cmt{(vypuštění prvku)}
\{0, 7, 14, 21, 28, 35, 42, 49\}
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Fronta s dvěma konci}
Podobné jako list, ale umí rychle přidávat a odebírat ze začátku.
\pycode{deque.py}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Časování v notebooku}
\pycode{nadruhou.py}
\py{%
x[:3] + [0] + x[3:] \cmt{(vložení prvku)}
\%timeit nadruhou(10)
}{%
[11, 22, 33, 0, 44, 55, 66, 77]
132 ns ± 4.96 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
}
\py{%
x[2:4] = [1, 2, 3, 4] \\
x
\%timeit -r1 -n10 nadruhou(10)
}{%
[11, 22, 1, 2, 3, 4, 55, 66, 77] \cmt{(přiřazení do řezu)}
290 ns ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)
}
\py{%
y=[1,2,3] \\
y[0:0] = [-1] \\
y
\%\%timeit -r1 -n10 \cmt{(celá buňka, 2x \%)} \\
nadruhou(10) \\
nadruhou(10)
}{%
[-1, 1, 2, 3] \cmt{(jiný způsob, jak vložit prvek)}
360 ns ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Řetězce se chovají jako seznamy}
......@@ -219,8 +252,9 @@ e \\
}
\py{%
help("")
[p + q for p in '123' for q in 'ab']
}{%
['1a', '1b', '2a', '2b', '3a', '3b']
}
\end{frame}
......@@ -263,4 +297,60 @@ True \cmt{(pozor, nerespektuje česká pravidla)}
% ----------------------------------------------------------------------
\begin{frame}{Převody mezi typy dat}
\py{%
int("123")
}{%
123
}
\py{%
str(123)
}{%
"123"
}
\py{%
list("123")
}{%
['1', '2', '3']
}
\py{%
str(['1', '2', '3'])
}{%
"['1', '2', '3']"
}
\py{%
list(range(1, 10))
}{%
[1, 2, 3, 4, 5, 6, 7, 8, 9]
}
\end{frame}
% ----------------------------------------------------------------------
\begin{frame}{Úkoly na hodinu}
otočte řetězec (datel → letad)
\bigskip
otočte číslo v desítkové soustavě (1024 → 4201)
\bigskip
spočítejte, kolik zadaný řetězec obsahuje různých slov
\bigskip
vyhodnoťte výraz se sčítáním (12+34+1 → 47)
\end{frame}
% ----------------------------------------------------------------------
\end{document}
from collections import deque
N = 99999
a = [x for x in range(N)]
b = deque(a)
# tohle je rychlé (čas 1)
a.pop()
b.pop()
a.pop(0) # tohle ale trvá N času
b.popleft() # deque je rychlý
# obdobně s vkládáním
b.appendleft(-1)
def nadruhou(n):
return n*n
\ No newline at end of file
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