@@ -176,7 +176,7 @@ Funguje to i pro více sekvencí.
176176V následujícím případě je výsledný ` zip ` iterátor čtveřic (věc, barva,
177177místo, číslo):
178178
179- ``` python
179+ ``` python
180180veci = [' tráva' , ' slunce' , ' mrkev' , ' řeka' ]
181181barvy = [' zelená' , ' žluté' , ' oranžová' , ' modrá' ]
182182mista = [' na zemi' , ' nahoře' , ' na talíři' , ' za zídkou' ]
@@ -193,3 +193,44 @@ Když si ale vypíšeš samotný objekt `zip`, zjistíš že o sobě nic moc ne
193193>>> zip (veci, barvy, mista, cisla)
194194<zip object at 0x7f0db61b1f48>
195195```
196+
197+
198+ ## Zip Longest: Pro ty co chtějí všechno
199+
200+ Jak se ` zip ` chová, když dostane seznamy různých délek?
201+
202+ ``` python
203+ veci = [' tráva' , ' slunce' , ' mrkev' , ' řeka' , ' myšlenka' , ' spravedlnost' ]
204+ barvy = [' zelená' , ' žluté' , ' oranžová' , ' modrá' ]
205+ for vec, barva in zip (veci, barvy):
206+ print (f " { vec} je { barva} " )
207+ ```
208+
209+ {% filter solution %}
210+ Výsledek ` zip ` skončí hned když „dojde“ nejkratší sekvence.
211+ {% endfilter %}
212+
213+ Občas je potřeba projít všechny záznamy.
214+ Na to slouží funkce ` zip_longest ` z modulu ` itertools ` :
215+
216+ ``` python
217+ from itertools import zip_longest
218+ for vec, barva in zip_longest(veci, barvy, fillvalue = ' (nevím)' ):
219+ print (f " { vec} je { barva} " )
220+ ```
221+
222+ Argument ` fillvalue ` říká, co se doplní za chybějící hodnoty.
223+ Když ho nezadáš, doplní se ` None ` („nic“, hodnota kterou např. vrací procedury).
224+ To se často používá, když je pro chybějící hodnoty potřeba nějaká
225+ složitější logika:
226+
227+ ``` python
228+ from itertools import zip_longest
229+ for vec, barva in zip_longest(veci, barvy):
230+ if vec == None :
231+ vec = ' nějaká věc'
232+ if barva == None :
233+ barva = ' bez barvy'
234+ print (f " { vec} je { barva} " )
235+ ```
236+
0 commit comments