Ako používať funkciu Zip v Pythone

How Use Zip Function Python



Tento článok sa bude zaoberať sprievodcom funkciou zip, ktorá je k dispozícii v štandardnej knižnici modulov Pythonu. Táto metóda vám umožňuje kombinovať a párovať prvky viacerých iterovateľných objektov. Na týchto dvojiciach potom môžete spustiť ďalšiu logiku. V mnohých prípadoch je používanie funkcie zip oveľa efektívnejšie a čistejšie ako používanie viacerých vnorených slučiek.

O funkcii Zip

Ako už bolo uvedené, funkcia zip sa používa na vytváranie párov z prvkov viacerých iterovateľných objektov. Na pochopenie základnej syntaxe a používania funkcie zip použite nasledujúci príklad:







zoznam 1= [„do“, 'b', 'c']
zoznam2= [„jablko“, 'lopta', 'mačka']
na zips= PSČ(zoznam 1,zoznam2)
vytlačiť (zoznam(na zips))

Prvé dva príkazy vo vyššie uvedenej ukážke kódu definujú dva zoznamy obsahujúce niektoré prvky. Ďalej sa používa funkcia zip, ktorá ako argumenty odovzdáva premenné list1 a list2. Toto je hlavná syntax funkcie zip. Musíte iba predložiť zoznamy alebo iné platné usporiadané iterácie ako argumenty, ktorých prvky chcete kombinovať. Nakoniec sa príkaz print použije na získanie výstupu skomprimovanej premennej. Po spustení vyššie uvedenej ukážky kódu by ste mali získať nasledujúci výstup:



[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Všimnite si toho, že funkcia zip vracia objekt typu zip a nie zoznam. Musíte ho previesť na iterovateľný typ, ako je uvedené v tlačovom vyhlásení vyššie.



Jednoducho povedané, funkcia zip zbiera prvky rovnakého indexu z dvoch zoznamov a kombinuje ich ako pár v súčinnosti. Takže 0. prvok zo zoznamu1 je kombinovaný s 0 -tým prvkom zoznamu2, prvý prvok zo zoznamu1 je kombinovaný s prvým prvkom zoznamu2 a tak ďalej. Funkcia zip sa pohybuje zľava doprava a n -tica obsahujúca spárované prvky má rovnaký index ako prvky v nich uložené.





Použitie zipsu, keď iterácie nemajú rovnaký počet prvkov

V prípade uvedenom vyššie majú oba zoznamy rovnaký počet prvkov. V prípade, že máte do činenia s nejakým kódom, kde oba zoznamy nemajú rovnaký počet prvkov, funkcia zip sa zastaví pri poslednom prvku zoznamu s najnižším počtom prvkov.

V nižšie uvedenom príklade sa funkcia zip zastaví na prvku c, bez ohľadu na to, že zoznam2 má ešte jeden prvok.



zoznam 1= [„do“, 'b', 'c']
zoznam2= [„jablko“, 'lopta', 'mačka', 'bábika']
na zips= PSČ(zoznam 1,zoznam2)
vytlačiť (zoznam(na zips))

Po spustení vyššie uvedenej ukážky kódu by ste mali získať nasledujúci výstup:

[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Pri použití funkcie zip môžete použiť viac ako dve iterovateľné položky

Na porovnanie dvoch iterovateľných objektov sa zvyčajne používa funkcia zip. Do funkcie zip však môžete odoslať ľubovoľný počet opakovaní ako argumenty. Stále bude platiť princíp zastavenia pri poslednom prvku najkratšieho zoznamu.

zoznam 1= [„do“, 'b', 'c']
zoznam2= [„jablko“, 'lopta', 'mačka', 'bábika']
zoznam 3= ['5', '3']
na zips= PSČ(zoznam 1,zoznam2,zoznam 3)
vytlačiť (zoznam(na zips))

Po spustení vyššie uvedenej ukážky kódu by ste mali dostať nasledujúci výstup:

[('a', 'apple', '5'), ('b', 'ball', '3')]

Vytváranie individuálnych zoznamov z objektu typu Zip

Ak už máte objekt zip, môžete ho použiť na repopuláciu jednotlivých zoznamov, ktoré boli predtým použité pri prvom vyvolaní funkcie zip.

zoznam 1= [„do“, 'b', 'c']
zoznam2= [„jablko“, 'lopta', 'mačka', 'bábika']
zoznam 3= ['5', '3']
na zips= PSČ(zoznam 1,zoznam2,zoznam 3)
l1,l2,l3= PSČ(*na zips)
vytlačiť (zoznam(l1), zoznam(l2), zoznam(l3))

Po spustení vyššie uvedenej ukážky kódu by ste mali dostať nasledujúci výstup:

['a', 'b'] ['jablko', 'guľa'] ['5', '3']

V ukážke kódu vyššie je objekt zip vypustený pomocou operátora *. Vyfúknuté výsledky sa potom vložia do ďalšej funkcie volania na zip, ktorá vytvorí pôvodné zoznamy. Upozorňujeme, že ak sa pri prvom vytváraní objektu zip použili zoznamy s nerovnakou dĺžkou, nemusí sa vám vrátiť všetky prvky do pôvodných zoznamov.

Používanie zipsu, ak chcete, aby prvky neboli najdlhšie upraviteľné

Vo viacerých vyššie uvedených príkladoch ste si mohli všimnúť, že funkcia zip sa v predvolenom nastavení zastaví na poslednom prvku najkratšej iterácie. Čo keď chcete, aby iterácia pokračovala, kým sa nedostane k poslednému prvku najdlhšej iterácie?

V takom prípade budete musieť použiť metódu zip_longest () z modulu itertools Pythonu. Funguje rovnako ako funkcia zip, s jediným malým rozdielom, že sa zastaví na poslednom prvku najdlhšieho iterovateľného typu.

od itertools importzip_longest
zoznam 1= [„do“, 'b', 'c']
zoznam2= [„jablko“, 'lopta', 'mačka', 'bábika']
zoznam 3= ['5', '3']
na zips=zip_longest(zoznam 1,zoznam2,zoznam 3)
vytlačiť (zoznam(na zips))

Po spustení vyššie uvedenej ukážky kódu by ste mali dostať nasledujúci výstup:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]

Chýbajúce hodnoty sú vyplnené ako objekty typu Žiadny. Môžete tiež zadať svoju vlastnú hodnotu na vyplnenie tým, že metóde zip_longest pošlete ďalší argument fillvalue.

od itertools importzip_longest
zoznam 1= [„do“, 'b', 'c']
zoznam2= [„jablko“, 'lopta', 'mačka', 'bábika']
zoznam 3= ['5', '3']
na zips=zip_longest(zoznam 1,zoznam2,zoznam 3,fillvalue='my_value')
vytlačiť (zoznam(na zips))

Po spustení vyššie uvedenej ukážky kódu by ste mali dostať nasledujúci výstup:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'doll ',' my_value ')]

Záver

Funkciu zip je možné emulovať pomocou niektorých príkazov slučiek a podmienok. Pomáha však udržiavať organizovaný a čistejší kód tým, že odstraňuje nepotrebnú výrečnosť a opakujúce sa vyhlásenia.