O funkci Zip
Jak již bylo uvedeno výše, funkce zip se používá k vytváření párů z prvků více iterovatelných objektů. Zvažte následující příklad, abyste porozuměli základní syntaxi a použití funkce zip:
seznam 1= ['na', 'b', 'C']
seznam 2= ['jablko', 'míč', 'kočka']
na zip= zip(seznam 1,seznam 2)
tisk (seznam(na zip))
První dva příkazy ve výše uvedené ukázce kódu definují dva seznamy obsahující některé prvky. Dále je použita funkce zip předáním proměnných list1 a list2 jako argumentů. Toto je hlavní syntaxe funkce zip. Stačí předat seznamy nebo jiné platné seřazené iterace jako argumenty, jejichž prvky chcete kombinovat. Nakonec se příkaz print používá k získání výstupu zipové proměnné. Po spuštění výše uvedeného ukázkového kódu byste měli získat následující výstup:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]
Všimněte si, že funkce zip vrací objekt typu zip a ne seznam. Musíte jej převést na iterovatelný typ, jak je uvedeno v tiskovém prohlášení výše.
Jednoduše řečeno, funkce zip sbírá prvky stejného indexu ze dvou seznamů a kombinuje je jako dvojici v n -tici. Takže 0. prvek ze seznamu1 je kombinován s 0. elementem seznamu2, 1. prvek ze seznamu1 je kombinován s 1. prvkem seznamu2 a tak dále. Funkce Zip se pohybuje zleva doprava a n -tice obsahující spárované prvky má stejný index jako prvky v nich uložené.
Používání zipu, když iterace nemají stejný počet prvků
Ve výše uvedeném příkladu mají oba seznamy stejný počet prvků. V případě, že pracujete s nějakým kódem, kde oba seznamy nemají stejný počet prvků, funkce zip se zastaví u posledního prvku seznamu, který má nejnižší počet prvků.
V níže uvedeném příkladu se funkce zip zastaví na prvku c, bez ohledu na to, že list2 má ještě jeden prvek.
seznam 1= ['na', 'b', 'C']
seznam 2= ['jablko', 'míč', 'kočka', 'panenka']
na zip= zip(seznam 1,seznam 2)
tisk (seznam(na zip))
Po spuštění výše uvedeného ukázkového kódu byste měli získat následující výstup:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]Při použití funkce zip můžete použít více než dva iterovatelné soubory
Funkce zip se obvykle používá ke srovnání dvou iterovatelných objektů. Do funkce zip však můžete předat libovolný počet iterable jako argumenty. Stále platí zásada zastavení na posledním prvku nejkratšího seznamu.
seznam 1= ['na', 'b', 'C']seznam 2= ['jablko', 'míč', 'kočka', 'panenka']
seznam 3= ['5', '3']
na zip= zip(seznam 1,seznam 2,seznam 3)
tisk (seznam(na zip))
Po spuštění výše uvedeného ukázkového kódu byste měli získat následující výstup:
[('a', 'apple', '5'), ('b', 'ball', '3')]Vytváření jednotlivých seznamů z objektu typu Zip
Pokud již máte objekt zip, můžete jej použít k repopulaci jednotlivých seznamů, které byly dříve použity při prvním volání funkce zip na ně.
seznam 1= ['na', 'b', 'C']seznam 2= ['jablko', 'míč', 'kočka', 'panenka']
seznam 3= ['5', '3']
na zip= zip(seznam 1,seznam 2,seznam 3)
l1,l2,l3= zip(*na zip)
tisk (seznam(l1), seznam(l2), seznam(l3))
Po spuštění výše uvedeného ukázkového kódu byste měli získat následující výstup:
['a', 'b'] ['jablko', 'koule'] ['5', '3']V ukázce kódu výše je objekt zip deflován pomocí operátoru *. Vyfouknuté výsledky jsou poté vloženy do další funkce volání zip, která vytvoří originální seznamy. Všimněte si, že nemusíte dostat všechny prvky zpět do původních seznamů, pokud byly při prvním vytvoření objektu zip použity seznamy nestejné délky.
Používání zipu, pokud chcete, aby prvky nebyly nejdéle upravitelné
Ve více výše uvedených příkladech jste si mohli všimnout, že funkce zip se ve výchozím nastavení zastaví na posledním prvku nejkratší iterovatelné. Co když chcete, aby pokračovalo v iteraci, dokud nedosáhne posledního prvku nejdéle iterovatelného?
V takovém případě budete muset použít metodu zip_longest () z modulu itertools Pythonu. Funguje stejně jako funkce zip, s jedním malým rozdílem, že se zastaví na posledním prvku nejdelšího iterovatelného typu.
z itertools importzip_longestseznam 1= ['na', 'b', 'C']
seznam 2= ['jablko', 'míč', 'kočka', 'panenka']
seznam 3= ['5', '3']
na zip=zip_longest(seznam 1,seznam 2,seznam 3)
tisk (seznam(na zip))
Po spuštění výše uvedeného ukázkového kódu byste měli získat následující výstup:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]Chybějící hodnoty jsou vyplněny jako objekty typu Žádný. Můžete také zadat svou vlastní hodnotu k vyplnění předáním dalšího argumentu fillvalue metodě zip_longest.
z itertools importzip_longestseznam 1= ['na', 'b', 'C']
seznam 2= ['jablko', 'míč', 'kočka', 'panenka']
seznam 3= ['5', '3']
na zip=zip_longest(seznam 1,seznam 2,seznam 3,fillvalue='my_value')
tisk (seznam(na zip))
Po spuštění výše uvedeného ukázkového kódu byste měli získat následující výstup:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'doll ',' my_value ')]Závěr
Funkci zip lze emulovat pomocí některých příkazů smyček a podmínek. Pomáhá však udržovat kód organizovaný a čistší tím, že odstraňuje zbytečnou výřečnost a opakující se prohlášení.