Wprowadzenie
Listy są przydatne na różne sposoby w porównaniu do innych datatypów ze względu na to, jak bardzo są uniwersalne. W tym artykule przyjrzymy się jednej z najczęściej wykonywanych operacji na listach – znajdowaniu indeksu elementu.
Przyjrzymy się różnym scenariuszom znajdowania elementu, tj. znajdowaniu pierwszego, ostatniego i wszystkich wystąpień elementu. A także co się stanie, gdy element, którego szukamy nie istnieje.
Użycie funkcji index()
Parametr element
oczywiście reprezentuje element, którego szukamy. Parametry start
i end
są opcjonalne i reprezentują zakres indeksów, w których szukamy elementu element
.
Domyślną wartością dla start
jest 0
(szukanie od początku), a domyślną wartością dla end
jest liczba elementów na liście (szukanie do końca listy).
Funkcja zwraca pierwszą pozycję element
na liście, którą udało się znaleźć, niezależnie od tego, ile jest równych elementów po pierwszym wystąpieniu.
Znajdowanie pierwszego wystąpienia elementu
Użycie funkcji index()
bez ustawiania żadnych wartości dla start
i end
da nam pierwsze wystąpienie elementu element
, którego szukamy:
my_list = first_occurrence = my_list.index('b')print("First occurrence of 'b' in the list: ", first_occurrence)
Co dałoby nam oczekiwane dane wyjściowe:
First occurrence of 'b' in the list: 1
Wyszukiwanie wszystkich wystąpień elementu
Aby znaleźć wszystkie wystąpienia elementu, możemy użyć opcjonalnego parametru start
tak, abyśmy wyszukiwali tylko w określonych segmentach listy.
Na przykład, powiedzmy, że znaleźliśmy pierwsze wystąpienie elementu w indeksie 3
. Aby znaleźć następny element, musielibyśmy kontynuować wyszukiwanie pierwszego wystąpienia tego elementu po indeksie 3
. Powtarzamy ten proces, zmieniając miejsce rozpoczęcia wyszukiwania, tak długo, jak długo znajdujemy nowe wystąpienia elementu:
Wykonanie tego kodu dałoby nam:
The element was found at:
Musieliśmy tutaj użyć bloku try
, ponieważ funkcja index()
wyrzuca błąd, gdy nie może znaleźć podanego element
w podanym zakresie. Może to być nietypowe dla programistów, którzy są bardziej przyzwyczajeni do innych języków, ponieważ funkcje tego typu zazwyczaj zwracają -1
null
gdy element nie może zostać znaleziony.
Jednakże w Pythonie musimy być ostrożni i używać bloku try
gdy używamy tej funkcji.
Innym, bardziej zgrabnym sposobem na zrobienie tego samego byłoby użycie list comprehension i całkowite zignorowanie funkcji index()
:
Co dałoby nam takie same dane wyjściowe jak poprzednio. To podejście ma dodatkową zaletę, że nie używa bloku try
.
Wyszukiwanie ostatniego wystąpienia elementu
Jeśli potrzebujesz znaleźć ostatnie wystąpienie elementu na liście, istnieją dwa podejścia, których możesz użyć z funkcją index()
:
- Odwróć listę i poszukaj pierwszego wystąpienia na odwróconej liście
- Przejdź przez wszystkie wystąpienia elementu i śledź tylko ostatnie wystąpienie
Odnosząc się do pierwszego podejścia, jeśli znaliśmy pierwsze wystąpienie elementu element
na odwróconej liście, moglibyśmy znaleźć pozycję ostatniego wystąpienia na oryginalnej liście. Dokładniej, możemy to zrobić, odejmując reversed_list_index - 1
od długości oryginalnej listy:
Co dałoby nam pożądane dane wyjściowe:
6
Jeśli chodzi o drugie podejście, moglibyśmy podrasować kod, którego użyliśmy do znalezienia wszystkich wystąpień i śledzić tylko ostatnie znalezione wystąpienie:
Co dałoby nam to samo wyjście: