Как найти индекс элемента в списках 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, давайте узнаем, как найти индекс элемента в списке.

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 в понимание списка.

python-найти-в-списке

Используя приведенное выше, выражение для понимания списка для создания целевых индексов выглядит следующим образом.

 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!