Ten samouczek nauczy Cię, jak używać funkcji enumerate() w Pythonie.
Funkcja enumerate() w Pythonie zapewnia zwięzłą składnię dostępu do elementów w iterowalnym wraz z ich indeksami.
Zaczniemy od omówienia, jak uzyskać dostęp do pozycji i indeksów za pomocą prostej pętli, a następnie przejdziemy do nauki składni funkcji enumerate() Pythona. Po drodze będziemy też kodować przykłady.
Zaczynajmy.
Spis treści:
Jak iterować za pomocą pętli for w Pythonie
Każdy obiekt Pythona, po którym możesz iterować i uzyskiwać dostęp do poszczególnych elementów — jeden po drugim, jest nazywany iterowalnym. Dlatego listy, krotki, słowniki i łańcuchy Pythona są iterowalne.
Weźmy przykład listy zakupów zdefiniowanej w komórce kodu poniżej.
shopping_list = ["fruits","cookies","cereals","protein bars","post-it notes"]
W Pythonie możesz użyć pętli for do zapętlenia dowolnego elementu iteracyjnego. Składnia do tego jest następująca:
for item in <iterable>: # do something on item # item: looping variable # <iterable>: any Python iterable: list, tuple, dictionary, string, and so on.
Teraz, korzystając z tej składni, przejdźmy przez listę_zakupów i uzyskajmy dostęp do poszczególnych pozycji.
for item in shopping_list: print(item) # Output fruits cookies cereals protein bars post-it notes
Ta konstrukcja pomaga w bezpośrednim dostępie do elementów. Czasami jednak może być potrzebny dostęp do indeksu elementów, oprócz samych elementów.
Możesz użyć zmiennej indeksującej, którą możesz zwiększać wewnątrz ciała pętli, jak pokazano poniżej:
index = 0 for item in shopping_list: print(f"index:{index}, {item}") index += 1 # Output index:0, fruits index:1, cookies index:2, cereals index:3, protein bars index:4, post-it notes
Ale to nie jest najskuteczniejsza metoda. Jeśli nie pamiętasz o zwiększaniu indeksu, Twój kod nie będzie działał zgodnie z oczekiwaniami.
index = 0 for item in shopping_list: print(f"index:{index}, {item}") # no update of index inside loop body # index is never updated and is always 0 # Output index:0, fruits index:0, cookies index:0, cereals index:0, protein bars index:0, post-it notes
Innym powszechnym wzorcem używania pętli for jest połączenie z funkcją range() . Dowiemy się o tym w następnej sekcji.
Jak używać funkcji range() w celu uzyskania dostępu do indeksu
Wbudowana w Pythona funkcja len() zwraca długość dowolnego obiektu Pythona. Możesz więc wywołać funkcję len() z argumentem shopping_list, aby uzyskać długość listy shopping_list (w tym przypadku jest to 5).
len(shopping_list) # Output: 5
Funkcja range() zwraca obiekt zakresu, którego można następnie użyć w pętli. Kiedy przejdziesz przez zakres (stop), otrzymasz indeksy 0, 1, 2,…, stop-1.
Ustawiając stop = len(list), możesz uzyskać listę ważnych indeksów. Używając funkcji range(), możesz uzyskać dostęp do indeksu, jak również do odpowiedniego elementu, jak pokazano poniżej.
for index in range(len(shopping_list)): print(f"index:{index}, item: {shopping_list[index]}") # Output index:0, item: fruits index:1, item: cookies index:2, item: cereals index:3, item: protein bars index:4, item: post-it notes
Jednak nie jest to zalecany w Pythonie sposób jednoczesnego uzyskiwania dostępu do indeksów i pozycji.
Składnia funkcji enumerate() w języku Python
Funkcja enumerate() Pythona umożliwia dostęp do elementów wraz z ich indeksami przy użyciu następującej ogólnej składni:
enumerate(<iterable>, start = 0)
W powyższej składni:
jest wymaganym parametrem i może to być dowolny iterowalny Python, taki jak lista lub krotka. - start to opcjonalny parametr, który kontroluje indeks, od którego rozpoczyna się zliczanie. Jeśli nie określisz wartości start, domyślnie jest to zero.
Możesz teraz wywołać funkcję enumerate() z shopping_list i zwraca ona obiekt enumerate, jak pokazano w komórce kodu poniżej.
enumerate(shopping_list) <enumerate at 0x7f91b4240410>
Nie można zapętlić obiektu enumerate. Przekształćmy więc obiekt enumerate w listę Pythona.
list(enumerate(shopping_list)) # Output [(0, 'fruits'), (1, 'cookies'), (2, 'cereals'), (3, 'protein bars'), (4, 'post-it notes')]
Inną metodą dostępu do elementów obiektu enumerate jest wywołanie funkcja next() z obiektem enumerate jako argumentem. W Pythonie funkcja next() zwraca następny element z iteratora.
Wewnętrznie funkcja next() działa poprzez wywołanie metody __next__ na obiekcie iteratora w celu pobrania kolejnych elementów.
Przypiszmy obiekt enumerate do zmiennej shopping_list_enum.
shopping_list_enum = enumerate(shopping_list)
Kiedy po raz pierwszy wywołasz next() z shopping_list_enum, otrzymasz indeks zero i element o indeksie 0: krotkę (0, 'owoce’).
Gdy będziesz kontynuować wykonywanie kolejnych wywołań funkcji next(), otrzymasz kolejne pozycje wraz z ich indeksami, jak opisano poniżej.
next(shopping_list_enum) # (0, 'fruits') next(shopping_list_enum) # (1, 'cookies') next(shopping_list_enum) # (2, 'cereals') next(shopping_list_enum) # (3, 'protein bars') next(shopping_list_enum) # (4, 'post-it notes')
Co się stanie, jeśli wywołasz funkcję next() po uzyskaniu dostępu do wszystkich elementów i dotarciu do końca listy? Otrzymujesz błąd StopIteration.
next(shopping_list_enum) # --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-16-4220f68f6c7e> in <module>() ----> 1 next(shopping_list_enum) StopIteration:
Funkcja enumerate() zwraca kolejne indeksy i pozycje tylko wtedy, gdy są potrzebne i nie są obliczane z wyprzedzeniem. W projektach Pythona, w których musisz wziąć pod uwagę wydajność pamięci, możesz spróbować użyć funkcji enumerate(), gdy musisz przejść przez duże iterable.
Przykłady funkcji enumerate() w języku Python
Teraz, gdy nauczyliśmy się składni korzystania z funkcji enumerate(), zmodyfikujmy pętlę for, którą mieliśmy wcześniej.
Z poprzedniej sekcji wiemy, że pętla przez obiekt enumerate zwraca krotkę z indeksem i elementem. Tę krotkę możemy rozpakować do dwóch zmiennych: index i item.
for index, item in enumerate(shopping_list): print(f"index:{index}, item:{item}") # Output index:0, item:fruits index:1, item:cookies index:2, item:cereals index:3, item:protein bars index:4, item:post-it notes
Następnie zobaczmy, jak określić niestandardową wartość początkową.
Jak enumerate() z niestandardową wartością początkową
Python stosuje indeksowanie zerowe, więc domyślnie wartość początkowa wynosi 0. Jeśli jednak potrzebujesz indeksów w formie czytelnej dla człowieka — zaczynając od 1 lub dowolnego innego wybranego indeksu, możesz określić niestandardową wartość początkową.
W przykładzie lista_zakupów, jeśli chcesz zacząć liczyć od 1, ustaw start = 1.
for index, item in enumerate(shopping_list,1): print(f"index:{index}, item:{item}") # Output index:1, item:fruits index:2, item:cookies index:3, item:cereals index:4, item:protein bars index:5, item:post-it notes
Jednak określając niestandardową wartość początkową, należy ją określić jako drugi argument pozycyjny.
Jeśli omyłkowo zamienisz kolejność iterowalności i wartości początkowej, napotkasz błąd, jak wyjaśniono w komórce kodu poniżej.
for index, item in enumerate(1,shopping_list): print(f"index:{index}, item:{item}") # Output --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-12-5dbf7e2749aa> in <module>() ----> 1 for index, item in enumerate(1,shopping_list): 2 print(f"index:{index}, item:{item}") TypeError: 'list' object cannot be interpreted as an integer
Aby uniknąć takich błędów, możesz określić start jako argument słowa kluczowego, jak pokazano poniżej.
for index, item in enumerate(shopping_list, start = 1): print(f"index:{index}, item:{item}") # Output index:1, item:fruits index:2, item:cookies index:3, item:cereals index:4, item:protein bars index:5, item:post-it notes
Do tej pory nauczyłeś się używać funkcji enumerate() z listami Pythona. Możesz również użyć funkcji enumerate, aby przejść przez ciągi, słowniki i krotki Pythona.
Jak używać funkcji enumerate() z krotkami Pythona
Załóżmy, że lista_zakupów jest krotką. W Pythonie krotki są również kolekcjami — podobnie jak listy w Pythonie, ale są niezmienne. Dlatego nie możesz ich modyfikować, a próba zrobienia tego doprowadzi do błędu.
Poniższy fragment kodu inicjuje shopping_list jako krotkę.
shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes") type(shopping_list) # Tuple
Jeśli spróbujesz zmodyfikować pierwszy element w krotce, otrzymasz błąd, ponieważ krotka Pythona jest niezmienną kolekcją.
shopping_list[0] = 'vegetables' # Output --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-2-ffdafa961600> in <module>() ----> 1 shopping_list[0] = 'vegetables' TypeError: 'tuple' object does not support item assignment
▶ Teraz uruchom poniższy fragment kodu, aby sprawdzić, czy funkcja enumerate() działa zgodnie z oczekiwaniami z krotkami.
shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes") for index, item in enumerate(shopping_list): print(f"index:{index}, item:{item}")
Jak używać funkcji enumerate() z ciągami Pythona
Możesz również użyć funkcji enumerate() w języku Python, aby przechodzić przez ciągi i jednocześnie uzyskiwać dostęp do znaków i indeksów.
Oto przykład.
py_str="Butterfly" for index, char in enumerate(py_str): print(f"index {index}: {char}") # Output index 0: B index 1: u index 2: t index 3: t index 4: e index 5: r index 6: f index 7: l index 8: y
Z powyższego wyniku widzimy, że znaki wraz z ich indeksami (0-8) zostały wydrukowane.
Wniosek👩🏽💻
Oto podsumowanie tego, czego się nauczyłeś.
- Możesz użyć pętli for, aby uzyskać dostęp do elementów i utrzymywać osobną zmienną licznika lub indeksu.
- Jeśli chcesz, możesz użyć funkcji range(), aby uzyskać prawidłowe indeksy i uzyskać dostęp do elementów poprzez indeksowanie listy.
- Jako zalecany sposób Pythona, możesz użyć funkcji enumerate() Pythona ze składnią: enumerate(iterable). Domyślnie liczba lub indeks zaczyna się od 0.
- Możesz określić niestandardową wartość początkową za pomocą składni enumerate(iterable, start), aby uzyskać indeks rozpoczynający się od wartości start i odpowiednich elementów.
- Funkcji enumerate można używać podczas pracy z krotkami, ciągami znaków, słownikami i ogólnie z dowolnymi iteracjami Pythona.
Mam nadzieję, że ten samouczek dotyczący funkcji enumerate() okazał się pomocny. Następnie dowiedz się, jak znaleźć indeks elementu w listach Pythona. Kontynuuj kodowanie!