Skip to content

Commit bbb284f

Browse files
committed
Fix up zip-enumerate lesson
1 parent 885e8b1 commit bbb284f

1 file changed

Lines changed: 29 additions & 30 deletions

File tree

lessons/beginners/zip-enumerate/index.md

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ trpaslici = ['Prófa', 'Stydlín', 'Dřímal', 'Kejchal', 'Štístko',
3333
```
3434

3535
Když na něj použiješ `enumerate`, dostaneš objekt `enumerate`,
36-
který podobně jako `range()` neukáže svůj obsah rovnou,
37-
ale můžeš se „do něj podívat převedením na seznam.
36+
který podobně jako `range()` neukáže svůj obsah rovnou,
37+
ale můžeš se „do něj podívat převedením na seznam.
3838
Uvidíš tak seznam dvojic (číslo, trpaslík):
3939

4040
```pycon
@@ -82,7 +82,7 @@ print(f'Na pozici {index} je {trpaslik}!')
8282
```
8383

8484
Kdybys to psal{{a}} ručně, lze to zjednodušit – přiřadit do dvou proměnných
85-
najedno, bez pomocné `dvojice`:
85+
najednou, bez pomocné proměnné `dvojice`:
8686

8787
```python
8888
index, trpaslik = 0, 'Prófa' # nastavení proměnných
@@ -97,8 +97,8 @@ print(f'Na pozici {index} je {trpaslik}!')
9797
# A tak dále
9898
```
9999

100-
A `for` tohle ve skutečnosti umí: místo do proměnné `dvojice` může přiřadit
101-
rovnou do dvou proměnných `index, trpaslik`:
100+
Cyklus `for` tohle ve skutečnosti umí: místo do proměnné `dvojice` může
101+
přiřadit rovnou do dvou proměnných `index, trpaslik`:
102102

103103
```python
104104
for index, trpaslik in enumerate(trpaslici):
@@ -154,29 +154,43 @@ for index, den in enumerate(dny, start=1):
154154

155155
Další iterátor <var>n</var>-tic je funkce `zip`, která umí projít dvě sekvence
156156
naráz.
157+
157158
Řekněme že máš seznam věcí a k nim příslušných barev:
158159

159160
``` python
160161
veci = ['tráva', 'slunce', 'mrkev', 'řeka']
161162
barvy = ['zelená', 'žluté', 'oranžová', 'modrá']
162163
```
163164

164-
Kdtyž tyto dva seznamy dáš funkci `zip`, dostaneš iterátor který příslušné
165-
hodnoty spáruje.
166-
Bude tedy obsahovat:
165+
Když na ně zavoláš `zip`, dostaneš iterátor, který (podobně jako `enumerate`
166+
nebo `range`) sám od sebe nic neříká:
167+
168+
```pycon
169+
>>> zip(veci, barvy)
170+
<zip object at 0x7f0db61b1f48>
171+
```
172+
173+
Po převedení na seznam se ale ukáže seznam odpovídajících si dvojic:
174+
175+
* Dvojice prvních prvků obou seznamů: (`tráva`, `zelená`)
176+
* Dvojice druhých prvků obou seznamů: (`slunce`, `žluté`)
177+
* Dvojice třetích prvků obou seznamů: (`mrkev`, `oranžová`)
178+
* A tak dál…
179+
180+
```pycon
181+
>>> list(zip(veci, barvy))
182+
[('tráva', 'zelená'), ('slunce', 'žluté'), ('mrkev', 'oranžová'), ('řeka', 'modrá')]
183+
```
167184

168-
* Dvojici prvních prvků obou seznamů: (`tráva`, `zelená`)
169-
* Dvojici druhých prvků obou seznamů: (`slunce`, `žluté`)
170-
* Dvojici třetích prvků obou seznamů: (`mrkev`, `oranžová`)
171-
* ...
185+
Takové dvojice jsou připravené na to, že je rozbalíš v cyklu `for`:
172186

173187
``` python
174188
for vec, barva in zip(veci, barvy):
175189
print(f"{vec} je {barva}")
176190
```
177191

178192
Funguje to i pro více sekvencí.
179-
V následujícím případě je výsledný `zip` iterátor čtveřic (věc, barva,
193+
V následujícím případě vznikne iterátor čtveřic (věc, barva,
180194
místo, číslo):
181195

182196
```python
@@ -189,21 +203,6 @@ for vec, barva, misto, cislo in zip(veci, barvy, mista, cisla):
189203
print(f"{cislo}. {barva} {vec} je {misto}")
190204
```
191205

192-
Když si ale vypíšeš samotný objekt `zip`, zjistíš že o sobě nic moc neřekne
193-
– podobně jako `enumerate`:
194-
195-
```pycon
196-
>>> zip(veci, barvy, cisla)
197-
<zip object at 0x7f0db61b1f48>
198-
```
199-
200-
Po převedení na seznam se ale seznam <var>n</var>-tic „ukáže”:
201-
202-
```pycon
203-
>>> list(zip(veci, barvy, cisla))
204-
[('tráva', 'zelená', 0), ('slunce', 'žluté', 1), ('mrkev', 'oranžová', 2), ('řeka', 'modrá', 3)]
205-
```
206-
207206

208207
## Zip Longest: Pro ty co chtějí všechno
209208

@@ -217,7 +216,7 @@ for vec, barva in zip(veci, barvy):
217216
```
218217

219218
{% filter solution %}
220-
Výsledek `zip` skončí hned když „dojde“ nejkratší sekvence.
219+
Iterátor `zip` skončí hned když dojdou prvky nejkratší sekvence.
221220
{% endfilter %}
222221

223222
Občas je potřeba projít všechny záznamy.
@@ -229,7 +228,7 @@ for vec, barva in zip_longest(veci, barvy, fillvalue='(nevím)'):
229228
print(f"{vec} je {barva}")
230229
```
231230

232-
Argument `fillvalue` říká, co se doplní za chybějící hodnoty.
231+
Pojmenovaný argument `fillvalue` říká, co se doplní za chybějící hodnoty.
233232
Když ho nezadáš, doplní se `None` („nic“, hodnota kterou např. vrací procedury).
234233
To se často používá, když je pro chybějící hodnoty potřeba nějaká
235234
složitější logika:

0 commit comments

Comments
 (0)