Как найти индекс элемента в списках Python
Опубликовано: 2022-06-29В этом руководстве вы узнаете, как найти индекс элемента в списке Python, используя как простые итерации, так и встроенный метод списка index() .
При работе со списками Python вам может понадобиться выяснить индекс, по которому встречается конкретный элемент. Вы можете сделать это:
- Проходя по списку и проверяя, равен ли элемент по текущему индексу определенному значению
- Использование встроенного метода списка
index()
Вы узнаете оба из вышеперечисленного в этом уроке. Давайте начнем.
Пересмотренные списки Python
В Python список — это набор элементов одного или разных типов данных. Они изменчивы ; вы можете изменить их на месте, не создавая новый список.
Рассмотрим этот пример fruits
: список из 5 разных фруктов.
fruits = ["apple","mango","strawberry","pomegranate","melon"]
Вы можете получить длину любого объекта Python, используя встроенную функцию len()
. Таким образом, вы можете вызвать функцию len()
с объектом списка ( fruits
) в качестве аргумента, чтобы получить его длину, как показано ниже.
len(fruits) # Output: 5
Мы будем использовать список fruits
в качестве рабочего примера в этом уроке.
Индексирование в списках Python
Python придерживается нулевой индексации . Таким образом, в любом итерируемом объекте Python первый элемент имеет индекс 0, второй элемент — индекс 1 и так далее. Если длина итерации равна k
, то последний элемент имеет индекс k - 1
.
В Python вы можете использовать функцию range() для получения индексов при переборе итераций.
Примечание . Когда вы перебираете
range(k)
, вы получаете индексы 0,1,2,…,(k-1). Таким образом, установивk = len(list)
, вы можете получить список всех допустимых индексов.
Следующая ячейка кода объясняет это.
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
Теперь, когда мы рассмотрели основы списков Python, давайте узнаем, как найти индекс элемента в списке.

Найдите индекс элемента списка по итерации с использованием циклов for
Рассмотрим список fruits
из предыдущего раздела. Мы узнаем, как найти индекс определенного элемента в этом списке путем итерации, используя цикл for
.
Использование функции for Loop и range()
Зафиксируем target
: значение, которое мы ищем в списке.
Вы можете использовать функцию for
loop и range()
для получения списка индексов от 0
до len(fruits) - 1
.
- Прокрутите список фруктов, обращающихся к каждому индексу.
- Проверьте, равен ли элемент по текущему индексу i целевому.
- Если
True
, вывести, чтоtarget
найдена по индексуi
.
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
В этом примере целевая строка 'mango'
появляется ровно один раз (в индексе 1) в списке fruits
.
Однако иногда целевое значение появляется несколько раз или вообще не отображается. Чтобы справиться с этими случаями, давайте изменим приведенный выше цикл и обернем содержимое внутри функции с именем find_in_list
.
Понимание определения функции
Функция find_in_list
имеет два параметра:
-
target
: значение, которое вы ищете, и -
py_list
: список Python, который вы ищете.
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}")
В теле функции мы инициализируем пустой список target_indices
. Мы прокручиваем список и получаем доступ к элементам списка. Если цель была найдена по определенному индексу, мы добавляем этот индекс в список target_indices
с помощью метода append()
.
Примечание . В Python
list.append(item)
добавляетitem
в конецlist
.
- Если цель так и не найдена, то
target_indices
— это пустой список; пользователь уведомляется о том, что цель отсутствует в списке. - Если цель найдена более чем по одному индексу, то
target_indices
содержит все эти индексы.
Далее давайте переопределим список fruits
, как показано.
На этот раз мы ищем target
строку 'mango'
, которая встречается дважды — с индексами 1 и 4.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]
При вызове функции find_in_list
с аргументами target
и fruits
мы видим, что возвращаются оба индекса.
target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!
Если вы попытаетесь найти 'turnip'
которой нет в списке fruits
, вы получите сообщение о том, что цель не найдена.
Использование функции for Loop и enumerate()
В Python вы можете использовать функцию enumerate()
для одновременного доступа к индексу и элементам без использования функции range()
.
В следующей ячейке кода показано, как можно использовать функцию enumerate()
для получения как индексов, так и элементов.
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
Теперь давайте перепишем функцию Python, чтобы найти индекс элементов в списке, используя функцию 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}")
Как и в предыдущем разделе, теперь вы можете вызывать функцию find_in_list
с допустимыми аргументами.
Вы можете перевести приведенное выше определение функции в эквивалентное понимание списка, и мы сделаем это в следующем разделе.
Найдите индекс элемента списка по итерации, используя понимание списка
Понимание списков в Python позволяет создавать списки из существующих списков на основе некоторых условий. Вот общая конструкция:
new_list = [<output> for <items in existing iterables> if <condition is true>]
На рисунке ниже показано, как идентифицировать элементы понимания списка; используя это, вы можете преобразовать функцию find_in_list
в понимание списка.

Используя приведенное выше, выражение для понимания списка для создания целевых индексов выглядит следующим образом.
target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]
В качестве упражнения вы можете попробовать запустить приведенный выше фрагмент кода для нескольких других примеров.
Найти индекс элемента списка с помощью метода index()
Чтобы найти индекс элемента в списке Python, вы также можете использовать встроенный метод .index()
. Вот общий синтаксис:
list.index(value,start,end)
Разбор вышеуказанного метода:
-
value
— это целевое значение, которое вы ищете. -
start
иend
— необязательные позиционные аргументы; вы можете использовать их для поиска индекса элемента в срезе списка, начиная сstart
и заканчиваяend - 1
.
Примечание . Метод .index() возвращает только индекс первого вхождения
value
вlist
. Даже когда вы найдете индекс элемента в срезе списка [start: end-1] , этот метод возвращает только индекс, соответствующий первому вхождению элемента.
Давайте вернемся к нашему примеру, чтобы понять, как работает метод .index()
.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1
Несмотря на то, что в списке fruits
есть два вхождения 'mango'
, вы можете видеть, что был возвращен только индекс первого вхождения.
Чтобы получить индекс второго вхождения манго, мы можем выполнить поиск в срезе списка, начиная с индекса 2 и дойдя до индекса 5, как показано ниже.
fruits.index(target,2,5) 4
Как обрабатывать ValueErrors в Python
Теперь давайте посмотрим, что произойдет, если вы попытаетесь найти индекс элемента, которого нет в списке, скажем, '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
Как видно из приведенной выше ячейки кода, это вызывает ошибку ValueError. В Python вы можете обрабатывать это как except
, используя блоки try
и exclude.
Общий синтаксис для использования try-except
следующий.
try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception
Используя приведенные выше блоки try-except, мы можем обрабатывать ValueError как исключение.
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
Приведенный выше код делает следующее:
- Если цель присутствует в списке, он возвращает индекс цели.
- Если цель отсутствует, она обрабатывает ValueError как исключение и выводит сообщение об ошибке.
Подводя итоги
Вот краткое изложение различных методов, которые вы изучили, чтобы найти индекс элемента в списке Python.
- Вы можете использовать функцию Python for loop и range() для получения элементов и их соответствующих индексов. Проверьте, соответствуют ли элементы в индексах цели.
- Вы также можете использовать функцию enumerate() для одновременного доступа к элементу и индексу.
- Вы можете использовать оба вышеупомянутых метода внутри выражения понимания списка.
- Чтобы найти индекс элемента в списке, вы также можете использовать встроенный метод .index() .
- list.index(value) возвращает индекс первого вхождения значения в списке . Если значение отсутствует, возникает ошибка ValueError .
- Вы можете выполнить поиск в определенном фрагменте списка, используя list.index(value, start, end) для поиска появления значения в фрагменте списка [start:end-1] .
Затем научитесь сортировать словарь Python по ключу или по значению. Удачного программирования на Python!