Użyj funkcji Enumerate w Pythonie do tworzenia pętli z licznikami

Use Enumerate Function Python Create Loops With Counters



W tym artykule wyjaśnimy użycie funkcji enumerate dostępnej w standardowej bibliotece modułów Pythona. Funkcja Enumerate umożliwia przypisanie indeksu lub liczby 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 zmapowanej do nich liczby.

Składnia i przykład podstawowy

Jeśli używałeś pętli for w innych językach programowania, zwłaszcza w języku C i innych językach mających 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 (inti= 0;i< 10;i++)

{

printf ('%D ',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:



dlaiw zasięg(0, 10):

wydrukować (i)

Funkcja range 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 range służy do ustawienia progu warunku zatrzymania. Oba przykłady kodu generują następujące dane wyjściowe:



0

1

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. Jednak może być konieczne użycie innej pętli zagnieżdżonej lub użycie funkcji uzysku na dowolnym typie iterowalnym, aby przypisać im pewną liczbę możliwych 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= katalogowany(liczby)

dlaindeks,przedmiotwenumerated_numbers:

wydrukować (indeks,przedmiot)

Pierwsza instrukcja definiuje nową zmienną zwaną liczbami i przypisuje jej iterację (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 listy. Domyślnie funkcja enumerate generuje obiekt typu enumerate, a nie typ iterowalny, więc musisz 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= katalogowany(liczby)

dlaindeks,przedmiotwenumerated_numbers:

wydrukować (indeks,przedmiot)

Podany powyżej przykładowy kod wygeneruje następujące dane wyjściowe:

0 zero

1 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ęć']

dlaindeks,przedmiotw katalogowany(liczby):

wydrukować (indeks,przedmiot)

Korzystanie z wyliczenia z innym indeksem początkowym

Funkcja enumerate przyjmuje opcjonalny argument, w którym można określić indeks początkowy. Domyślnie jest to zero, ale możesz to zmienić za pomocą argumentu start:

liczby= ['jeden', 'dwa', 'trzy', „cztery”, 'pięć']

dlaindeks,przedmiotw katalogowany(liczby,początek=1):

wydrukować (indeks,przedmiot)

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 jeden

2 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. Istnieje jednak sposób na zaimplementowanie niestandardowych kroków poprzez napisanie minimalnego kodu. Poniższy przykład pokazuje implementację kroków przy użyciu funkcji zip i range:

liczby= ['zero', 'dwa', „cztery”, 'sześć']

dlaindeks,przedmiotw zamek błyskawiczny(zasięg(0, 7, 2),liczby):

wydrukować (indeks,przedmiot)

Funkcja zip umożliwia tworzenie par poprzez pobieranie elementów o tym samym indeksie z dwóch lub więcej iterowalnych elementów. Tak więc funkcja zip pobiera tutaj element z iterowalnego zwróconego z funkcji range(0, 7, 2) i inny element z listy liczb, a następnie łączy je w pary w krotkę. Wynik końcowy jest identyczną implementacją do funkcji 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 zero

2 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 naprawdę przydatne, jeśli chcesz śledzić indeks elementów wewnątrz typu iterowalnego. Jeśli chcesz wyliczyć typy iterowalne za pomocą kroków niestandardowych, użyj funkcji zip wyjaśnionej w ostatnim przykładzie.