Jak používat funkci Zip v Pythonu

How Use Zip Function Python



Tento článek se bude zabývat průvodcem funkcí zip, který je k dispozici ve standardní knihovně modulů Pythonu. Tato metoda vám umožňuje kombinovat a párovat prvky více iterovatelných objektů. Na těchto párech pak můžete spustit další logiku. V mnoha případech je použití funkce zip mnohem efektivnější a čistší než použití více vnořených smyček.

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_longest
seznam 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_longest
seznam 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í.