Как найти индекс элемента в списках Python
В этом руководстве вы узнаете, как найти индекс элемента в списке Python, используя как простые итерации, так и встроенный метод списка index().
При работе со списками Python вам может понадобиться выяснить индекс, по которому встречается конкретный элемент. Вы можете сделать это:
- Проходя по списку и проверяя, равен ли элемент по текущему индексу определенному значению
- Использование встроенного метода списка index()
Вы узнаете оба из вышеперечисленного в этом уроке. Давайте начнем.
Пересмотренные списки Python
В Python список — это набор элементов одного или разных типов данных. Они изменчивы; вы можете изменить их на месте, не создавая новый список.
Рассмотрим этот пример фруктов: список из 5 разных фруктов.
fruits = ["apple","mango","strawberry","pomegranate","melon"]
Вы можете получить длину любого объекта Python, используя встроенную функцию len(). Таким образом, вы можете вызвать функцию len() с объектом списка (фрукты) в качестве аргумента, чтобы получить его длину, как показано ниже.
len(fruits) # Output: 5
Мы будем использовать список фруктов в качестве рабочего примера в этом уроке.
Индексирование в списках Python
Python следует нулевой индексации. Таким образом, в любом итерируемом объекте Python первый элемент имеет индекс 0, второй элемент — индекс 1 и так далее. Если длина итерации равна k, то последний элемент имеет индекс k – 1.
В Python вы можете использовать функцию range() для получения индексов при переборе итераций.
Примечание. Когда вы перебираете диапазон (k), вы получаете индексы 0,1,2,…, (k-1). Таким образом, установив k = len(list), вы можете получить список всех допустимых индексов.
Следующая ячейка кода объясняет это.
for i in range(len(fruits)): print(f"i:, fruit[] is ") # 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
Рассмотрим список плодов из предыдущего раздела. Мы узнаем, как найти индекс определенного элемента в этом списке путем итерации, используя цикл for.
Использование функции for Loop и range()
Зафиксируем цель: значение, которое мы ищем в списке.
Вы можете использовать цикл for и функцию range(), чтобы получить список индексов от 0 до len(fruits) – 1.
- Прокрутите список фруктов, обращающихся к каждому индексу.
- Проверьте, равен ли элемент по текущему индексу i целевому.
- Если True, вывести, что цель найдена по индексу i.
fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f" found at index ") # Output mango found at index 1
В этом примере целевая строка «манго» появляется ровно один раз (в индексе 1) в списке фруктов.
Однако иногда целевое значение появляется несколько раз или вообще не отображается. Чтобы справиться с этими случаями, давайте изменим приведенный выше цикл и обернем содержимое внутри функции с именем find_in_list.
Понимание определения функции
Функция find_in_list имеет два параметра:
- цель: значение, которое вы ищете, и
- 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" is found at indices ")
В теле функции мы инициализируем пустой список target_indices. Мы прокручиваем список и получаем доступ к элементам списка. Если цель была найдена по определенному индексу, мы добавляем этот индекс в список target_indices с помощью метода append().
Примечание. В Python list.append(item) добавляет элемент в конец списка.
- Если цель так и не найдена, то target_indices — это пустой список; пользователь уведомляется о том, что цель отсутствует в списке.
- Если цель найдена более чем по одному индексу, то target_indices содержит все эти индексы.
Далее давайте переопределим список фруктов, как показано.
На этот раз мы ищем целевую строку ‘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!
Если вы попытаетесь найти «репу», которой нет в списке фруктов, вы получите сообщение о том, что цель не найдена.
Использование функции for Loop и enumerate()
В Python вы можете использовать функцию enumerate() для одновременного доступа к индексу и элементам без использования функции range().
В следующей ячейке кода показано, как можно использовать функцию enumerate() для получения как индексов, так и элементов.
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index : ") # 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" is found at indices ")
Как и в предыдущем разделе, теперь вы можете вызывать функцию find_in_list с допустимыми аргументами.
Вы можете перевести приведенное выше определение функции в эквивалентное понимание списка, и мы сделаем это в следующем разделе.
Найдите индекс элемента списка по итерации, используя понимание списка
Понимание списков в Python позволяет создавать списки из существующих списков на основе некоторых условий. Вот общая конструкция:
new_list = [ for if ]
На рисунке ниже показано, как идентифицировать элементы понимания списка; используя это, вы можете преобразовать функцию 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 — необязательные позиционные аргументы; вы можете использовать их для поиска индекса элемента в срезе списка, начиная с начала и до конца — 1.
Примечание. Метод .index() возвращает только индекс первого вхождения значения в список. Даже когда вы найдете индекс элемента в срезе списка [start: end-1]этот метод возвращает только индекс, соответствующий первому вхождению элемента.
Давайте вернемся к нашему примеру, чтобы понять, как работает метод .index().
fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1
Несмотря на то, что в списке фруктов есть два вхождения «манго», вы можете видеть, что был возвращен только индекс первого вхождения.
Чтобы получить индекс второго вхождения манго, мы можем выполнить поиск в срезе списка, начиная с индекса 2 и дойдя до индекса 5, как показано ниже.
fruits.index(target,2,5) 4
Как обрабатывать ValueErrors в Python
Теперь давайте посмотрим, что произойдет, если вы попытаетесь найти индекс элемента, которого нет в списке, скажем, «морковь».
target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) in () 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list
Как видно из приведенной выше ячейки кода, это создает ValueError. В Python вы можете обрабатывать это как исключение, используя блоки try и exclude.
Общий синтаксис для использования try-except следующий.
try: # to do this except : # do this to handle as exception
Используя приведенные выше блоки try-except, мы можем обрабатывать ValueError как исключение.
target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find 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!
Что делает функция индекс в Python?
Метод index() в Python помогает найти значение индекса элемента в последовательности. Он выдает наименьший возможный индекс указанного элемента. Если указанный элемент не существует, то возвращается ValueError.
sequence.index(x[, start[, end]])
- sequence — это объект, элементы которого представляют собой некую индексированную последовательность (строка, список, кортеж). Каждый элемент последовательности имеет индекс — целое число, обозначающее его позицию в последовательности. Нумерация индексов начинается с 0 (нуля).
- x — искомый элемент последовательности, чей наименьший индекс будет возвращен.
- Необязательные аргументы start и end используются для ограничения поиска конкретной подпоследовательностью списка, путем задания среза. Возвращаемый индекс вычисляется относительно изначальной последовательности, а не среза, заданного start и end.
str_seq = 'aebcdef' #Последовательность в виде строки print(str_seq.index('e')) # => 1 print(str_seq.index('e', 2)) # => 5 print(str_seq.index('k')) # => ValueError: substring not found lst_seq = ['a', 'e', 'b', 'c', 'd', 'e', 'f'] #Последовательность в виде списка print(lst_seq.index('b')) # => 2 print(lst_seq.index('k')) # => ValueError: 'k' is not in list tup_seq = ('a', 'e', 'b', 'c', 'd', 'e', 'f') #Последовательность в виде кортежа print(tup_seq.index('a')) # => 0
Найти индекс всех вхождений элемента в списке Python
В этом посте будет обсуждаться, как найти индекс всех вхождений элемента в списке Python.
1. Использование enumerate() функция
Чтобы получить индекс всех вхождений элемента в список, вы можете использовать встроенную функцию enumerate() . Он был введен для решения задачи счетчика циклов и может использоваться следующим образом:
if __name__ == ‘__main__’ :
ints = [ 1 , 3 , 7 , 5 , 4 , 3 ]
for index , elem in enumerate ( ints ) :
if elem == item :
print ( f »
3 is found at index 1
3 is found at index 5
Чтобы получить список всех индексов сразу, используйте понимание списка с функцией перечисления:
if __name__ == ‘__main__’ :
ints = [ 1 , 3 , 7 , 5 , 4 , 3 ]
indexes = [ i for i , j in enumerate ( ints ) if j == item ]
print ( f «Item
# результат: Item 3 is found at index [1, 5]
2. Использование range() функция
В качестве альтернативы вы можете использовать range() функция, чтобы получить список всех допустимых индексов, а затем сопоставить соответствующее значение, присутствующее в каждом индексе, с данным элементом.
if __name__ == ‘__main__’ :
ints = [ 1 , 3 , 7 , 5 , 4 , 3 ]
indexes = [ i for i in range ( len ( ints ) ) if ints [ i ] == item ]
print ( f «Item
# результат: Item 3 is found at index [1, 5]
3. Использование itertools модуль
Другой подход заключается в использовании count() функционировать в itertools , который создает итератор для эффективного цикла, чтобы возвращать равномерно распределенные значения, начиная с заданного числа. Вы можете использовать его с zip() для добавления порядковых номеров следующим образом.
from itertools import count
if __name__ == ‘__main__’ :
ints = [ 1 , 3 , 7 , 5 , 4 , 3 ]
zipped = [ ( i , j ) for i , j in zip ( count ( ) , ints ) if j == item ]
print ( zipped )
4. Использование more_itertools модуль
The more-itertools библиотека предоставляет элегантные подпрограммы для работы с итерируемыми объектами Python. Вы можете использовать more_itertools.locate функция, которая возвращает индекс каждого элемента в итерируемом объекте, для которого выполняется заданный предикат. Ниже приведен простой пример, демонстрирующий использование этой функции:
Метод List.index в Python
Из этого руководства вы узнаете о методе индекса списка Python. Вы увидите, как использовать его на последовательностях с помощью примеров.
Синтаксис, используемый в следующем разделе, предназначен для Python 3. Вы можете изменить его на любые другие версии Python.
Функция Index — это встроенный метод списка, который позволяет узнать индекс или позицию элемента в последовательности.
Другими словами, этот метод ищет элемент в списке и возвращает его индекс.
Его синтаксис выглядит следующим образом:
List_name.index()
Он принимает элемент в качестве аргумента и возвращает индекс. Обратите внимание, что вы можете предоставить любой ввод, такой как список, кортеж или подстрока.
Смотрите пример ниже.
myList = ['1', '11', 1, 'a', 'x', 1.1] myList.index(1) # 2 myList.index('x') # 4
Как работает функция Index()?
Требуется один аргумент, который является элементом, для которого вы хотите найти индекс или позицию в качестве результата.
Этот метод ищет элемент в списке и возвращает индекс, соответствующий его значению, в противном случае возникает ошибка ValueError.
При поиске подстрок возникает следующая ошибка.
"Substring not found"
first = 'Python is the language of the future.' print(first.index('lang', 10)) # 14 print(first.index('invalid', 10))Traceback (most recent call last): File "", line 1, in print(first.index('invalid', 10)) ValueError: substring not found