Pyton

Jak korzystać z funkcji Zip w Pythonie?

Jak korzystać z funkcji Zip w Pythonie?
Ten artykuł zawiera przewodnik po 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 uruchomić 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 „for”.

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 = ["a", "b", "c"]
list2 = ["jabłko", "piłka", "kot"]
zip = zip(lista1, lista2)
drukuj (lista (skompresowana))

Pierwsze dwie instrukcje w powyższym przykładzie kodu definiują dwie listy zawierające pewne elementy. Następnie wykorzystywana jest funkcja „zip”, przekazując jako argumenty zmienne „list1” i „list2”. 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 „skompresowanej” 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ższym oświadczeniu 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 „lista1” jest łączony z 0. elementem „lista2”, pierwszy element z „listy1” jest łączony z pierwszym elementem „lista2” 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ą tej 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 = ["a", "b", "c"]
list2 = ["jabłko", "piłka", "kot", "lalka"]
zip = zip(lista1, lista2)
drukuj (lista (skompresowana))

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”. Zasada zatrzymania się na ostatnim elemencie najkrótszej listy będzie nadal obowiązywać list.

lista1 = ["a", "b", "c"]
list2 = ["jabłko", "piłka", "kot", "lalka"]
lista3 = ["5", "3"]
zip = zip(lista1, lista2, lista3)
drukuj (lista (skompresowana))

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 = ["a", "b", "c"]
list2 = ["jabłko", "piłka", "kot", "lalka"]
lista3 = ["5", "3"]
zip = zip(lista1, lista2, lista3)
l1, l2, l3 = zip(*zip)
drukuj (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 listy o nierównej długości zostały użyte podczas tworzenia obiektu „zip” po raz pierwszy.

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

W wielu powyższych przykładach mogłeś zauważyć, że funkcja „zip” domyślnie zatrzymuje się na ostatnim elemencie najkrótszej iterowalnej. 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 import zip_longest
lista1 = ["a", "b", "c"]
list2 = ["jabłko", "piłka", "kot", "lalka"]
lista3 = ["5", "3"]
zip = zip_longest(lista1, lista2, lista3)
drukuj (lista (skompresowana))

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 import zip_longest
lista1 = ["a", "b", "c"]
list2 = ["jabłko", "piłka", "kot", "lalka"]
lista3 = ["5", "3"]
zip = zip_longest(lista1, lista2, lista3, fillvalue="moja_wartość")
drukuj (lista (skompresowana))

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

Funkcja zip może być emulowana za pomocą niektórych pętli i instrukcji warunków. Pomaga jednak w utrzymaniu porządku i czystości kodu, usuwając niepotrzebną gadatliwość i powtarzające się instrukcje.

Gry Przydatne narzędzia dla graczy Linuksa
Przydatne narzędzia dla graczy Linuksa
Jeśli lubisz grać w gry w systemie Linux, prawdopodobnie używałeś aplikacji i narzędzi, takich jak Wine, Lutris i OBS Studio, aby poprawić wrażenia z ...
Gry Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Wielu twórców gier i wydawców wymyśla remaster HD starych gier, aby przedłużyć żywotność serii, prosimy fanów o kompatybilność z nowoczesnym sprzętem ...
Gry Jak używać AutoKey do automatyzacji gier Linux
Jak używać AutoKey do automatyzacji gier Linux
AutoKey to narzędzie do automatyzacji pulpitu dla systemów Linux i X11, zaprogramowane w Python 3, GTK i Qt. Korzystając ze skryptów i funkcji MAKRO, ...