Jak znaleźć indeks elementu na listach Pythona
Opublikowany: 2022-06-29W tym przewodniku dowiesz się, jak znaleźć indeks elementu na liście Pythona, zarówno przy użyciu prostych iteracji, jak i wbudowanej metody listy index() .
Podczas pracy z listami Pythona może być konieczne znalezienie indeksu, w którym występuje określony element. Możesz to zrobić poprzez:
- Przeglądanie listy i sprawdzanie, czy pozycja w bieżącym indeksie jest równa określonej wartości
- Korzystanie z wbudowanej metody listy
index()
Dowiesz się obu powyższych w tym samouczku. Zacznijmy.
Listy Pythona, ponownie
W Pythonie lista jest zbiorem elementów — tego samego lub różnych typów danych. Są zmienne ; możesz je modyfikować na miejscu bez konieczności tworzenia nowej listy.
Rozważ ten przykładowy fruits
: lista 5 różnych owoców.
fruits = ["apple","mango","strawberry","pomegranate","melon"]
Długość dowolnego obiektu Pythona można uzyskać za pomocą wbudowanej funkcji len()
. Możesz więc wywołać funkcję len()
z obiektem listy ( fruits
) jako argumentem, aby uzyskać jej długość, jak pokazano poniżej.
len(fruits) # Output: 5
W tym samouczku użyjemy listy fruits
jako działającego przykładu.
Indeksowanie w listach Pythona
Python podąża za indeksowaniem zerowym . Tak więc w każdym iterowalnym Pythonie pierwszy element znajduje się pod indeksem 0, drugi pod indeksem 1 i tak dalej. Jeśli długość elementu iteracyjnego wynosi k
, to ostatni element ma indeks k - 1
.
W Pythonie możesz użyć funkcji range(), aby uzyskać indeksy podczas przechodzenia przez iterable.
Uwaga : Kiedy przejdziesz przez
range(k)
, otrzymasz indeksy 0,1,2,…,(k-1). Tak więc ustawiająck = len(list)
, możesz uzyskać listę wszystkich poprawnych indeksów.
Wyjaśnia to następująca komórka kodu.
for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon
Teraz, gdy omówiliśmy podstawy list w Pythonie, nauczmy się, jak znaleźć indeks elementu na liście.

Znajdź indeks elementu listy według iteracji za pomocą pętli
Rozważmy listę fruits
z poprzedniej sekcji. Dowiemy się, jak znaleźć indeks określonego elementu na tej liście, wykonując iterację za pomocą pętli for
.
Używanie funkcji pętli i zakresu()
Ustalmy target
: wartość, której szukamy na liście.
Możesz użyć funkcji pętli for
i range()
, aby uzyskać listę indeksów od 0
do len(fruits) - 1
.
- Przeglądaj listę owoców uzyskujących dostęp do każdego indeksu.
- Sprawdź, czy pozycja w bieżącym indeksie i jest równa wartości docelowej.
- Jeśli
True
, wypisz , żetarget
został znaleziony pod indeksemi
.
fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1
W tym przykładzie docelowy ciąg 'mango'
pojawia się dokładnie raz (pod indeksem 1) na liście fruits
.
Czasami jednak wartość docelowa pojawia się więcej niż raz lub wcale. Aby poradzić sobie z tymi przypadkami, zmodyfikujmy powyższą pętlę i zapakuj zawartość wewnątrz funkcji o nazwie find_in_list
.
Zrozumienie definicji funkcji
Funkcja find_in_list
ma dwa parametry:
-
target
: wartość, której szukasz, oraz -
py_list
: lista Pythona, którą przeszukujesz.
def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
W ciele funkcji inicjujemy pustą listę target_indices
. Przechodzimy przez listę i uzyskujemy dostęp do elementów listy. Jeśli cel został znaleziony pod określonym indeksem, dodajemy ten indeks do listy target_indices
za pomocą metody append()
.
Uwaga : W Pythonie
list.append(item)
dodajeitem
na konieclist
.
- Jeśli cel nigdy nie zostanie znaleziony, to
target_indices
jest pustą listą; użytkownik jest powiadamiany, że celu nie ma na liście. - Jeśli cel znajduje się w więcej niż jednym indeksie, to
target_indices
zawiera wszystkie te indeksy.
Następnie przedefiniujmy listę fruits
, jak pokazano.
Tym razem szukamy target
ciągu znaków 'mango'
, który występuje dwukrotnie – przy indeksach 1 i 4.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]
Po wywołaniu funkcji find_in_list
z argumentami target
i fruits
widzimy, że zwracane są oba indeksy.
target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!
Jeśli spróbujesz wyszukać 'turnip'
której nie ma na liście fruits
, otrzymasz komunikat, że cel nie został znaleziony.
Używanie funkcji pętli i enumerate()
W Pythonie możesz użyć funkcji enumerate()
, aby uzyskać dostęp do indeksu i elementów jednocześnie — bez konieczności używania funkcji range()
.
Poniższa komórka kodu pokazuje, w jaki sposób można użyć funkcji enumerate()
, aby uzyskać zarówno indeksy, jak i elementy.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon
Teraz przepiszmy funkcję Pythona, aby znaleźć indeks elementów na liście za pomocą funkcji enumerate()
.
def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")
Podobnie jak w poprzedniej sekcji, możesz teraz wywołać funkcję find_in_list
z prawidłowymi argumentami.
Możesz przetłumaczyć powyższą definicję funkcji na równoważną listę składaną i zrobimy to w następnej sekcji.
Znajdź indeks elementu listy według iteracji przy użyciu rozumienia listy
Listy składane w Pythonie umożliwiają tworzenie list z istniejących list na podstawie pewnych warunków. Oto ogólna konstrukcja:
new_list = [<output> for <items in existing iterables> if <condition is true>]
Poniższy rysunek opisuje, jak zidentyfikować elementy rozumienia listy; używając tego, możesz przekonwertować funkcję find_in_list
na listę składaną.

Korzystając z powyższego, wyrażenie dla zrozumienia listy do tworzenia indeksów docelowych jest następujące.
target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]
W ramach ćwiczenia możesz spróbować uruchomić powyższy fragment kodu dla kilku innych przykładów.
Znajdź indeks elementu listy za pomocą metody index()
Aby znaleźć indeks elementu na liście Pythona, możesz również użyć wbudowanej metody .index()
. Oto ogólna składnia:
list.index(value,start,end)
Parsowanie powyższej metody:
-
value
to wartość docelowa, której szukasz. -
start
iend
są opcjonalnymi argumentami pozycyjnymi; możesz ich użyć do wyszukiwania, aby znaleźć indeks elementu na wycinku listy, zaczynając odstart
i rozciągając się naend - 1
.
Uwaga : Metoda .index() zwraca tylko indeks pierwszego wystąpienia
value
wlist
. Nawet jeśli znajdziesz indeks elementu w wycinku listy [start: end-1] , ta metoda zwraca tylko indeks odpowiadający pierwszemu wystąpieniu elementu.
Wróćmy do naszego przykładu, aby zrozumieć, jak działa metoda .index()
.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1
Mimo że na liście fruits
występują dwa wystąpienia 'mango'
, widać, że zwrócono tylko indeks pierwszego wystąpienia.
Aby uzyskać indeks drugiego wystąpienia mango, możemy przeszukać wycinek listy, zaczynając od indeksu 2 i rozciągając się do indeksu 5, jak pokazano poniżej.
fruits.index(target,2,5) 4
Jak radzić sobie z błędami wartości w Pythonie?
Zobaczmy teraz, co się stanie, jeśli spróbujesz znaleźć indeks elementu, którego nie ma na liście, powiedzmy 'carrot'
.
target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list
Jak widać w komórce kodu powyżej, zgłasza to ValueError. W Pythonie możesz obsłużyć to jako except
za pomocą bloków try
andexcept.
Ogólna składnia do używania try-except
jest następująca.
try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception
Używając powyższych bloków try-except, możemy obsłużyć ValueError jako wyjątek.
target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list
Powyższy kod wykonuje następujące czynności:
- Jeśli cel znajduje się na liście, zwraca indeks celu.
- Jeśli cel nie istnieje, traktuje ValueError jako wyjątek i wyświetla komunikat o błędzie.
Podsumowując
Oto podsumowanie różnych metod wyszukiwania indeksu pozycji na liście Pythona, których się nauczyłeś.
- Możesz użyć funkcji pętli for i range() Pythona, aby uzyskać elementy i ich indeksy. Sprawdź, czy pozycje w indeksach pasują do celu.
- Możesz również użyć funkcji enumerate() , aby jednocześnie uzyskać dostęp do elementu i indeksu.
- Możesz użyć obu powyższych metod wewnątrz wyrażenia listowego.
- Aby znaleźć indeks elementu na liście, możesz również użyć wbudowanej metody .index() .
- list.index(wartość) zwraca indeks pierwszego wystąpienia value w liście . Jeśli wartość nie jest obecna, zgłasza ValueError .
- Możesz przeszukiwać określony wycinek listy za pomocą list.index(wartość, początek, koniec), aby wyszukać wystąpienie wartości w wycince listy [początek:koniec-1] .
Następnie naucz się sortować słownik Pythona według klucza lub według wartości. Szczęśliwego programowania w Pythonie!