Как да използвате функцията Zip в Python

How Use Zip Function Python



Тази статия ще обхваща ръководство за zip функцията, налична в стандартната библиотека на модули на Python. Този метод ви позволява да комбинирате и сдвоявате елементи от множество итерируеми обекти. След това можете да изпълните допълнителна логика на тези двойки. В много случаи използването на zip функция е много по -ефективно и по -чисто, отколкото използването на множество, вложени за цикли.

Всичко за функцията Zip

Както бе посочено по -рано, функцията zip се използва за създаване на двойки от елементи на множество итерируеми обекти. Помислете за примера по -долу, за да разберете основния синтаксис и използването на zip функция:







списък1= ['да се', 'b', '° С']
списък2= ['ябълка', 'топка', 'котка']
с цип= цип(списък1,списък2)
печат (списък(с цип))

Първите две изявления в горната извадка от код дефинират два списъка, съдържащи някои елементи. След това функцията zip се използва чрез предаване на променливите list1 и list2 като аргументи. Това е основният синтаксис на функцията zip. Просто трябва да предадете списъци или други валидни подредени итерации като аргументи, чиито елементи искате да комбинирате. И накрая, операторът print се използва за получаване на резултата от ципната променлива. След като стартирате кода, споменат по -горе, трябва да получите следния изход:



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

Обърнете внимание, че функцията zip връща обект от тип zip, а не списък. Трябва да го конвертирате в тип, който може да се повтори, както е показано в изявлението за печат по -горе.



С прости думи, функцията zip взема елементи от един и същ индекс от два списъка и ги комбинира като двойка в кортеж. Така че 0 -ият елемент от списък1 се комбинира с 0 -ия елемент от списък2, първият елемент от списък1 се комбинира с 1 -ви елемент от списък2 и т.н. Функцията Zip се движи отляво надясно и кортежът, съдържащ сдвоени елементи, има същия индекс като елементите, съхранени в тях.





Използване на Zip, когато Iterables нямат същия брой елементи

В горния пример и двата списъка имат равен брой елементи. В случай, че имате работа с някакъв код, при който и двата списъка нямат еднакъв брой елементи, функцията zip ще спре на последния елемент от списъка с най -малък брой елементи.

В примера по -долу функцията zip ще спре на елемента c, независимо че list2 има още един елемент.



списък1= ['да се', 'b', '° С']
списък2= ['ябълка', 'топка', 'котка', 'кукла']
с цип= цип(списък1,списък2)
печат (списък(с цип))

След като стартирате кода, споменат по -горе, трябва да получите следния изход:

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

Можете да използвате повече от две Iterables, когато използвате Zip функция

Обикновено функцията zip се използва за сравняване на два повторяеми обекта. Можете обаче да предадете произволен брой повторяеми елементи като аргументи на функцията zip. Принципът на спиране при последния елемент от най -краткия списък ще бъде все още приложим.

списък1= ['да се', 'b', '° С']
списък2= ['ябълка', 'топка', 'котка', 'кукла']
списък3= ['5', '3']
с цип= цип(списък1,списък2,списък3)
печат (списък(с цип))

След като стартирате кода, споменат по -горе, трябва да получите следния изход като резултат:

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

Създаване на отделни списъци от обект тип цип

Ако вече имате zip обект, можете да го използвате за повторно попълване на отделни списъци, които са били използвани по -рано, когато функцията zip е била извикана за първи път при тях.

списък1= ['да се', 'b', '° С']
списък2= ['ябълка', 'топка', 'котка', 'кукла']
списък3= ['5', '3']
с цип= цип(списък1,списък2,списък3)
l1,l2,l3= цип(*цип)
печат (списък(l1), списък(l2), списък(l3))

След като стартирате кода, споменат по -горе, трябва да получите следния изход като резултат:

['a', 'b'] ['ябълка', 'топка'] ['5', '3']

В горната примера на кода, zip обектът се дефлира с помощта на оператора *. След това дефлираните резултати се подават в друга функция за извикване на zip, която създава оригинални списъци. Обърнете внимание, че може да не получите всички елементи обратно в оригиналните списъци, ако са били използвани списъци с неравна дължина при създаването на zip обекта за първи път.

Използване на Zip, когато искате да запазите елементите от най -дългите Iterable

В няколко примера по -горе може да сте забелязали, че функцията zip по подразбиране спира до последния елемент на най -краткия повторяем. Ами ако искате тя да продължи да се повтаря, докато достигне последния елемент от най -дългата итерация?

В такъв случай ще трябва да използвате метода zip_longth () от модула itertools на Python. Работи по същия начин като функцията zip, с една малка разлика, че спира до последния елемент от най -дългия итерируем тип.

от itertools вносzip_lo Long
списък1= ['да се', 'b', '° С']
списък2= ['ябълка', 'топка', 'котка', 'кукла']
списък3= ['5', '3']
с цип=zip_lo Long(списък1,списък2,списък3)
печат (списък(с цип))

След като стартирате кода, споменат по -горе, трябва да получите следния изход като резултат:

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

Липсващите стойности се попълват като обекти от тип Няма. Можете също да предоставите своя собствена стойност за попълване, като предадете допълнителен аргумент fillvalue на метода zip_longth.

от itertools вносzip_lo Long
списък1= ['да се', 'b', '° С']
списък2= ['ябълка', 'топка', 'котка', 'кукла']
списък3= ['5', '3']
с цип=zip_lo Long(списък1,списък2,списък3,fillvalue='my_value')
печат (списък(с цип))

След като стартирате кода, споменат по -горе, трябва да получите следния изход като резултат:

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', 'кукла ',' my_value ')]

Заключение

Zip функцията може да бъде емулирана с помощта на някои цикли и условия. Той обаче помага за поддържането на кода организиран и по -чист, като премахва ненужната многословност и повтарящите се изявления.