Wykonując operacje na listach musimy jasno sprecyzować, do którego je elementu chcemy uzyskać dostęp. Dokonujemy tego za pomocą indeksów wskazując wprost interesujący nas element listy. Często jednak dane zapisane na liście przetwarzamy w pętli. Pokażę Ci w jaki sposób najprościej w pętli odczytać kolejne wartości elementów listy oraz ekstremalnie przydatny sposób wykorzystania funkcji enumerate()
do znalezienia numeru indeksu listy, pod którym poszukiwana wartość została zapisana.
Pętla, która odczytuje wszystkie elementy listy
Pętli for
z listami używamy wtedy gdy chcemy przetworzyć jej elementy. W najprostszym przypadku wygląda to tak:
lista_a = [ 1, 2, 3, 4, 5] for list_object in lista_a: print(list_object)
W definicji pętli zadeklarowaliśmy nową zmienną o nazwie list_object
. W każdym kolejnej iteracji pętli zmiennej tej będzie przypisywana wartość kolejnego elementu z tablicy, który za pomocą funkcji print()
wypisujemy na ekranie. Iteracja po obiektach listy jest bardzo często wykorzystywana, na przykład gdy poszukujemy, czy zadana wartość znajduje się jako element tablicy:
lista_a = [ 1, 2, 3, 4, 5] for list_object in lista_a: if list_object == 2: print("Znalazłem dwójkę!")
Często nie sam fakt znalezienia wartości w tablicy nas interesuje, ale także pozycja w tablicy, pod którą jest on zapisany. Jeżeli kiedykolwiek programowaliście w C czy Pascalu, to zapewne nie jest Wam obce następujące rozwiązanie:
lista_a = [ 1, 2, 3, 4, 5] pozycja = 0 for list_object in lista_a: if list_object == 2: print('Znalazłem dwójkę na pozycji ', pozycja) pozycja += 1
W wyniku działania powyzszego kodu na ekranie zobaczymy:
Znalazłem dwójkę na pozycji 1
Metoda ta polega na tym, że dodajemy w programie nową zmienną i nadajemy jej wartość 0, To wartość indeksu pierwszego elementu tablicy. O tym jak numerowane są rekordy listy pisałem tutaj. Następnie wartość tą zwiększamy o jeden wraz z każdą iteracją pętli. W ten sposób wiemy, w którym rekordzie znajduje się poszukiwana wartość.
Funkcja enumerate()
W Pytonie możemy nasz kod uprościć. W języku istnieje specjalna wbudowana funkcja enumerate()
, która pozwala na automatyczne zliczanie na przykład przebiegu pętli.
lista_a = [ 1, 2, 3, 4, 5] for pozycja, list_object in enumerate(lista_a): if list_object == 2: print('Znalazłem dwójkę na pozycji', pozycja)
Powyższy kod zwróci nam identyczny wynik znany z poprzedniego przykładu.
Znalazłem dwójkę na pozycji 1
W definicji samej pętli odwołujemy się do dwóch zmiennych, pierwszej z nich przypisana będzie wartość funkcji enumerate()
, a drugiej wartość obiektu iteracji pętli.
Funkcja enumerate()
może przyjmować dodatkowy argument, czyli początkową wartość od której iteracja będzie zliczana.
lista_a = [ 1, 2, 3, 4, 5] for pozycja, list_object in enumerate(lista_a, 1): if list_object == 2: print('Znalazłem dwójkę, jest ona elementem', pozycja, 'na liście')
W wyniku działania tego programu otrzymamy nie tylke indeks, pod którym znajduje się zapisana wartość dwa, co informację bardziej czytelną dla odbiorce, że jest to drugi element w tablicy
Znalazłem dwójkę, jest ona elementem 2 na liście
Jeszcze inne ciekawe wykorzystanie funkcji enumerate()
pokażę Wam, gdy będę opowiadał o typie danych tuple
.