Ten artykuł wyjaśni użycie funkcji „enumerate” dostępnej w standardowej bibliotece modułów Pythona. Funkcja Enumerate pozwala przypisać „indeks” lub „liczbę” do elementów w dowolnym iterowalnym obiekcie. Następnie możesz na nich zaimplementować dalszą logikę, ponieważ będziesz mieć dostęp do obu wartości i przypisanej do nich liczby.
Składnia i przykład podstawowy
Jeśli użyłeś pętli „for” w innych językach programowania, zwłaszcza w języku „C” i innych językach o składni w stylu „C”, być może określiłeś indeks początkowy w pętli. Dla porównania, oto jak wygląda pętla „for” w „C” i innych językach o podobnej składni:
dla (int i = 0; i < 10; i++)printf("%d\n", i);
Instrukcja loop inicjalizuje zmienną o wartości zero, sprawdza, czy jest ona mniejsza niż próg i zwiększa ją o jeden licznik po przeanalizowaniu logiki wewnątrz bloku pętli (jeśli spełniony jest warunek zatrzymania). W ten sposób możesz użyć indeksu i przypisać go do dowolnych obiektów, do których odwołuje się twój blok pętli. Dla porównania, oto jak wygląda pętla for z takim samym wynikiem w Pythonie:
dla i w zakresie (0, 10):drukuj (i)
Funkcja „zakres” w Pythonie pozwala określić sekwencję zakresu liczb, która ma domyślny krok 1. Możesz zmienić wartość kroku, podając trzeci argument. Drugi argument w funkcji „zakres” służy do ustawienia progu warunku zatrzymania. Oba przykłady kodu generują następujące dane wyjściowe:
01
2
3
4
5
6
7
8
9
Te pętle działają dobrze, jeśli chcesz po prostu wygenerować sekwencję liczb i powiązać ją z pewną logiką wewnątrz instrukcji pętli loop. Jednakże, być może będziesz musiał użyć innej pętli zagnieżdżonej lub użyć funkcji "yield" na dowolnym typie iterowalnym, aby przypisać im jakąś liczbę do śledzenia. Metoda „enumerate” ułatwia przypisywanie indeksów do elementów iteracyjnych w jednej instrukcji, eliminując w ten sposób potrzebę uruchamiania wielu zagnieżdżonych pętli. Spójrz na ten przykładowy kod:
liczby = ["zero", "jeden", "dwa", "trzy", "cztery", "pięć"]enumerated_numbers = enumerate (liczby)
dla indeksu pozycja w enumerated_numbers:
druk (indeks, pozycja)
Pierwsza instrukcja definiuje nową zmienną o nazwie „liczby” i przypisuje jej iterowalność (typ listy). Druga instrukcja pokazuje użycie funkcji „enumerate”, w której podajesz iterowalną jako obowiązkowy argument. Trzecia instrukcja konwertuje zmienną „enumerated_numbers” na obiekt typu lista. Domyślnie funkcja „enumerate” generuje obiekt typu „enumerate”, a nie typ iterowalny, więc trzeba go przekonwertować. Po uruchomieniu przykładowego kodu wspomnianego powyżej, powinieneś otrzymać następujące dane wyjściowe:
[(0, 'zero'), (1, 'jeden'), (2, 'dwa'), (3, 'trzy'), (4, 'cztery'), (5, 'pięć')]Funkcja „enumerate” przypisuje liczbę do każdego elementu w typie iterowalnym i tworzy krotki mające sparowane wartości. Domyślnie liczenie zaczyna się od zera.
Teraz, gdy przypisałeś numer do każdego elementu w typie iterowalnym, możesz łatwo go zapętlić bez pisania zagnieżdżonych instrukcji:
liczby = ["zero", "jeden", "dwa", "trzy", "cztery", "pięć"]enumerated_numbers = enumerate (liczby)
dla indeksu pozycja w enumerated_numbers:
druk (indeks, pozycja)
Podany powyżej przykładowy kod wygeneruje następujące dane wyjściowe:
0 zero1 jeden
2 dwa
3 trzy
4 cztery
5 pięć
Możesz skrócić kod, używając wbudowanej funkcji „enumerate”, jak pokazano w poniższym przykładzie:
liczby = ["zero", "jeden", "dwa", "trzy", "cztery", "pięć"]dla indeksu, pozycja w enumerate(liczby):
druk (indeks, pozycja)
Korzystanie z wyliczenia z innym indeksem początkowym
Funkcja „enumerate” przyjmuje opcjonalny argument, w którym można określić początkowy indeks. Domyślnie jest to zero, ale możesz to zmienić za pomocą argumentu „start”:
liczby = ["jeden", "dwa", "trzy", "cztery", "pięć"]dla indeksu, pozycja w enumerate(numbers, start=1):
druk (indeks, pozycja)
W drugiej instrukcji argument „start=1” służy do zmiany punktu początkowego. Po uruchomieniu przykładowego kodu określonego powyżej, powinieneś otrzymać następujące dane wyjściowe:
1 jeden2 dwa
3 trzy
4 cztery
5 pięć
Przypisywanie indeksu krokami
W pierwszej części tego artykułu pokazano składnię pętli „for” w języku „C”, w której można zdefiniować kroki między kolejnymi licznikami lub indeksami. Funkcja „enumerate” w Pythonie nie ma żadnego takiego argumentu, więc nie możesz określić kroku między liczbami. Rzeczywiście możesz napisać własną logikę, aby zaimplementować kroki wewnątrz wyliczonego bloku pętli „for”. Istnieje jednak sposób na zaimplementowanie niestandardowych kroków poprzez pisanie minimalnego kodu. Poniższy przykład przedstawia realizację kroków z wykorzystaniem funkcji „zip” i „zakres”:
liczby = ["zero", "dwa", "cztery", "sześć"]dla indeksu, pozycja w zip(zakres(0, 7, 2), liczby):
druk (indeks, pozycja)
Funkcja „zip” umożliwia tworzenie par poprzez pobranie elementów o tym samym indeksie z dwóch lub więcej iterowalnych. Tak więc funkcja „zip” pobiera tutaj element z iterowalnego zwróconego z funkcji „range(0, 7, 2)” i inny element z listy „liczby”, a następnie łączy je oba w krotkę. Efektem końcowym jest identyczna implementacja jak funkcja „enumerate”, ale z niestandardowymi krokami określonymi jako trzeci argument w funkcji „range(0, 7, 2)” (w tym przypadku 2). Po uruchomieniu przykładowego kodu określonego powyżej, powinieneś otrzymać następujące dane wyjściowe:
0 zero2 dwa
4 cztery
6 sześć
Wniosek
Funkcja „enumerate” w Pythonie umożliwia pisanie zwięzłego kodu poprzez przypisanie sekwencji liczb do elementów w obiekcie iterowalnym. Jest to bardzo przydatne, jeśli chcesz śledzić indeks elementów wewnątrz typu iterowalnego. Jeśli chcesz „wyliczyć” iterowalne typy za pomocą niestandardowych kroków, użyj funkcji „zip” wyjaśnionej w ostatnim przykładzie.