Jak używać funkcji Zip w Pythonie?

How Use Zip Function Python



Ten artykuł zawiera przewodnik dotyczący funkcji zip dostępnej w standardowej bibliotece modułów Pythona. Ta metoda umożliwia łączenie i parowanie elementów wielu iterowalnych obiektów. Następnie możesz przeprowadzić dalszą logikę na tych parach. W wielu przypadkach użycie funkcji zip jest znacznie wydajniejsze i czystsze niż używanie wielu zagnieżdżonych pętli.

O funkcji Zip

Jak wspomniano wcześniej, funkcja zip służy do tworzenia par z elementów wielu iterowalnych obiektów. Rozważ poniższy przykład, aby zrozumieć podstawową składnię i użycie funkcji zip:







lista1= ['do', 'b', 'C']
lista2= ['jabłko', 'piłka', 'Kot']
zapinany na zamek= zamek błyskawiczny(lista1,lista2)
wydrukować (lista(zapinany na zamek))

Pierwsze dwie instrukcje w powyższym przykładzie kodu definiują dwie listy zawierające pewne elementy. Następnie funkcja zip jest używana przez przekazanie zmiennych list1 i list2 jako argumentów. To jest główna składnia funkcji zip. Musisz tylko przekazać listy lub inne poprawne uporządkowane iterable jako argumenty, których elementy chcesz połączyć. Na koniec instrukcja print służy do uzyskania danych wyjściowych spakowanej zmiennej. Po uruchomieniu przykładowego kodu wspomnianego powyżej, powinieneś otrzymać następujące dane wyjściowe:



[('a', 'jabłko'), ('b', 'piłka'), ('c', 'kot')]

Zauważ, że funkcja zip zwraca obiekt typu zip, a nie listę. Musisz przekonwertować go na typ iterowalny, jak pokazano w powyższej instrukcji print.



Mówiąc prościej, funkcja zip pobiera elementy tego samego indeksu z dwóch list i łączy je w parę w krotkę. Tak więc 0. element z listy1 jest łączony z 0. elementem listy2, pierwszy element z listy1 jest łączony z pierwszym elementem listy2 i tak dalej. Funkcja Zip przesuwa się od lewej do prawej, a krotka zawierająca sparowane elementy ma ten sam indeks, co elementy w nich przechowywane.





Używanie ZIP, gdy elementy iterowalne nie mają takiej samej liczby elementów

W powyższym przykładzie obie listy mają równą liczbę elementów. W przypadku, gdy masz do czynienia z jakimś kodem, w którym obie listy nie mają takiej samej liczby elementów, funkcja zip zatrzyma się na ostatnim elemencie listy mającym najmniejszą liczbę elementów.

W poniższym przykładzie funkcja zip zatrzyma się na elemencie c, niezależnie od tego, czy list2 ma jeszcze jeden element.



lista1= ['do', 'b', 'C']
lista2= ['jabłko', 'piłka', 'Kot', 'Lalka']
zapinany na zamek= zamek błyskawiczny(lista1,lista2)
wydrukować (lista(zapinany na zamek))

Po uruchomieniu przykładowego kodu wspomnianego powyżej, powinieneś otrzymać następujące dane wyjściowe:

[('a', 'jabłko'), ('b', 'piłka'), ('c', 'kot')]

Możesz użyć więcej niż dwóch iterable podczas korzystania z funkcji Zip

Zwykle funkcja zip służy do porównywania dwóch iterowalnych obiektów. Możesz jednak przekazać dowolną liczbę iteracji jako argumenty do funkcji zip. Nadal będzie obowiązywać zasada zatrzymania się na ostatnim elemencie najkrótszej listy.

lista1= ['do', 'b', 'C']
lista2= ['jabłko', 'piłka', 'Kot', 'Lalka']
lista3= [„5”, „3”]
zapinany na zamek= zamek błyskawiczny(lista1,lista2,lista3)
wydrukować (lista(zapinany na zamek))

Po uruchomieniu przykładowego kodu wspomnianego powyżej, powinieneś otrzymać następujące dane wyjściowe:

[('a', 'jabłko', '5'), ('b', 'piłka', '3')]

Tworzenie indywidualnych list z obiektu typu Zip

Jeśli masz już obiekt zip, możesz go użyć do ponownego wypełnienia poszczególnych list, które były wcześniej używane, gdy funkcja zip była na nich wywoływana po raz pierwszy.

lista1= ['do', 'b', 'C']
lista2= ['jabłko', 'piłka', 'Kot', 'Lalka']
lista3= [„5”, „3”]
zapinany na zamek= zamek błyskawiczny(lista1,lista2,lista3)
l1,l2,l3= zamek błyskawiczny(*zamknięty)
wydrukować (lista(l1), lista(l2), lista(l3))

Po uruchomieniu przykładowego kodu wspomnianego powyżej, powinieneś otrzymać następujące dane wyjściowe:

['a', 'b'] ['jabłko', 'piłka'] ['5', '3']

W powyższym przykładzie kodu obiekt zip jest korygowany za pomocą operatora *. Nieprecyzyjne wyniki są następnie przekazywane do innego wywołania funkcji zip, która tworzy oryginalne listy. Pamiętaj, że możesz nie odzyskać wszystkich elementów z oryginalnych list, jeśli podczas tworzenia obiektu zip po raz pierwszy użyto list o nierównej długości.

Używanie Zip, gdy chcesz zachować elementy z najdłuższego iterowalności

W wielu powyższych przykładach mogłeś zauważyć, że funkcja zip domyślnie zatrzymuje się na ostatnim elemencie najkrótszej iteracji. Co zrobić, jeśli chcesz, aby kontynuował iterację, aż osiągnie ostatni element najdłuższej iteracji?

W takim przypadku będziesz musiał użyć metody zip_longest() z modułu itertools Pythona. Działa tak samo jak funkcja zip, z jedną niewielką różnicą, że zatrzymuje się na ostatnim elemencie najdłuższego typu iterowalnego.

z itertools importzip_longest
lista1= ['do', 'b', 'C']
lista2= ['jabłko', 'piłka', 'Kot', 'Lalka']
lista3= [„5”, „3”]
zapinany na zamek=zip_longest(lista1,lista2,lista3)
wydrukować (lista(zapinany na zamek))

Po uruchomieniu przykładowego kodu wspomnianego powyżej, powinieneś otrzymać następujące dane wyjściowe:

[('a', 'jabłko', '5'), ('b', 'piłka', '3'), ('c', 'kot', Brak), (Brak, 'lalka', Brak) ]

Brakujące wartości są wypełniane jako obiekty typu Brak. Możesz również podać własną wartość do wypełnienia, przekazując dodatkowy argument fillvalue do metody zip_longest.

z itertools importzip_longest
lista1= ['do', 'b', 'C']
lista2= ['jabłko', 'piłka', 'Kot', 'Lalka']
lista3= [„5”, „3”]
zapinany na zamek=zip_longest(lista1,lista2,lista3,wartość wypełnienia=„moja_wartość”)
wydrukować (lista(zapinany na zamek))

Po uruchomieniu przykładowego kodu wspomnianego powyżej, powinieneś otrzymać następujące dane wyjściowe:

[('a', 'jabłko', '5'), ('b', 'piłka', '3'), ('c', 'kot', 'moja_wartość'), ('moja_wartość', 'lalka ', 'moja_wartość')]

Wniosek

Funkcję Zip można emulować za pomocą niektórych pętli i instrukcji warunków. Pomaga jednak w utrzymaniu porządku i czystości kodu, usuwając niepotrzebną szczegółowość i powtarzające się instrukcje.