Funkce Zip
Jak již bylo uvedeno výše, funkce „zip“ se používá k vytvoření párů z prvků více iterovatelných objektů. Zvažte níže uvedený příklad, abyste pochopili základní syntaxi a použití funkce zip:
list1 = ["a", "b", "c"]list2 = ["jablko", "koule", "kočka"]
zip = zip (seznam1, seznam2)
tisk (seznam (zazipovaný))
První dva příkazy ve výše uvedeném ukázce kódu definují dva seznamy obsahující některé prvky. Dále se funkce „zip“ používá k předávání proměnných „list1“ a „list2“ jako argumentů. Toto je hlavní syntaxe funkce „zip“. Musíte pouze předat seznamy nebo jiné platné uspořádané iterovatelné tabulky jako argumenty, jejichž prvky chcete kombinovat. Nakonec se příkaz print použije k získání výstupu proměnné „zazipovaný“. Po spuštění výše uvedeného ukázky kódu byste měli získat následující výstup:
[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]Upozorňujeme, že funkce „zip“ vrací objekt typu „zip“, nikoli 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 pár v n-tici. Takže 0. element z „list1“ je kombinován s 0. elementem „list2“, 1. element z „list1“ je kombinován s 1. elementem „list2“ atd. 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ž položky nemají stejný počet prvků
Ve výše uvedeném příkladu mají oba seznamy stejný počet prvků. V případě, že máte co do činění 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í u prvku „c“, bez ohledu na to, že „list2“ bude mít ještě jeden prvek.
list1 = ["a", "b", "c"]list2 = ["jablko", "koule", "kočka", "panenka"]
zip = zip (seznam1, seznam2)
tisk (seznam (zazipovaný))
Po spuštění výše uvedeného ukázky 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ž dvě věci
Funkce „zip“ se obvykle používá k porovnání dvou iterovatelných objektů. Funkci „zip“ však můžete předat libovolný počet iterabilních argumentů. Princip zastavení u posledního prvku nejkratšího seznamu bude stále platit.
list1 = ["a", "b", "c"]list2 = ["jablko", "koule", "kočka", "panenka"]
list3 = ["5", "3"]
zip = zip (seznam1, seznam2, seznam3)
tisk (seznam (zazipovaný))
Po spuštění výše uvedeného ukázky kódu byste měli jako výsledek 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 vyvolání funkce zip na nich.
list1 = ["a", "b", "c"]list2 = ["jablko", "koule", "kočka", "panenka"]
list3 = ["5", "3"]
zip = zip (seznam1, seznam2, seznam3)
l1, l2, l3 = zip (* na zip)
tisk (seznam (l1), seznam (l2), seznam (l3))
Po spuštění výše uvedeného ukázky kódu byste měli jako výsledek získat následující výstup:
['a', 'b'] ['jablko', 'míč'] ['5', '3']Ve výše uvedeném ukázce kódu je objekt „zip“ vyfouknut pomocí operátoru „*“. Deflované výsledky jsou poté přeneseny do dalšího volání funkce zip, která vytváří původní 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 s nestejnou délkou.
Používání zipu, když chcete zabránit tomu, aby byly prvky co nejdéle ignorovatelné
V několika výše uvedených příkladech jste si možná všimli, že funkce „zip“ se ve výchozím nastavení zastaví u posledního prvku nejkratší iterovatelné. Co když chcete, aby pokračovalo v iteraci, dokud nedosáhne posledního prvku nejdelší iterace?
V takovém případě budete muset použít metodu „zip_longest ()“ z modulu „itertools“ v Pythonu. Funguje stejně jako funkce „zip“, s malým rozdílem, že se zastaví u posledního prvku nejdelší iterovatelného typu.
z itertools import zip_longestlist1 = ["a", "b", "c"]
list2 = ["jablko", "koule", "kočka", "panenka"]
list3 = ["5", "3"]
zip = zip_longest (seznam1, seznam2, seznam3)
tisk (seznam (zazipovaný))
Po spuštění výše uvedeného ukázky kódu byste měli jako výsledek získat následující výstup:
[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]Chybějící hodnoty se naplní jako objekty typu „Žádný“. Můžete také zadat svoji vlastní hodnotu k vyplnění předáním dalšího argumentu „fillvalue“ metodě „zip_longest“.
z itertools import zip_longestlist1 = ["a", "b", "c"]
list2 = ["jablko", "koule", "kočka", "panenka"]
list3 = ["5", "3"]
zipped = zip_longest (list1, list2, list3, fillvalue = "my_value")
tisk (seznam (zazipovaný))
Po spuštění výše uvedeného ukázky kódu byste měli jako výsledek 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ší odstraněním zbytečné výřečnosti a opakujících se příkazů.