Python list.index(): как находить позиции элементов — практические примеры
Списки Python — упорядоченные коллекции, способные хранить элементы любого типа: целые числа, строки, булевы значения, вложенные списки и многое другое. Встроенный метод list.index() — самый быстрый способ найти позицию элемента в этой последовательности. Ниже вы найдёте пошаговое руководство с кусками кода и альтернативными техниками для получения индексов, даже когда элемент встречается несколько раз.
Понимание list.index()
Метод list.index() возвращает наименьший индекс, по которому встречается указанное значение. Если значение отсутствует, поднимает ValueError. Для справки см. официальную документацию Python.
Синтаксис
list.index(element, start=0, end=len(list))
Параметры
| Параметр | Описание |
|---|---|
element | Значение, которое нужно найти. |
start | Опционально. Начать поиск с этого индекса. По умолчанию 0. |
end | Опционально. Остановить поиск перед этим индексом. По умолчанию — длина списка. |
Возвращаемое значение
Возвращает целочисленный индекс первого совпадающего элемента. Поднимает ValueError, если элемент отсутствует.
Пример: базовое использование
my_list = ['A', 'B', 'C', 'D', 'E', 'F']
print("Index of 'C':", my_list.index('C')) # 2
print("Index of 'F':", my_list.index('F')) # 5
Пример: использование start и end
my_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print("Index of 'C' between 1 and 5:", my_list.index('C', 1, 5)) # 2
print("Index of 'F' between 3 and 7:", my_list.index('F', 3, 7)) # 5
print("Index of 'D' starting from 1:", my_list.index('D', 1)) # 3
Пример: элемент не найден
my_list = ['A', 'B', 'C', 'D']
try:
my_list.index('Z')
except ValueError as e:
print(e) # 'Z' is not in list
Получение всех индексов для повторяющегося элемента
Когда значение встречается несколько раз, list.index() возвращает только первую позицию. Ниже — несколько подходов для сбора всех индексов.
Использование for-цикла
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
indices = []
for i, val in enumerate(my_list):
if val == 'Guru':
indices.append(i)
print(indices) # [0, 3, 6]
While-цикл с index()
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
indices = []
next_index = -1
while True:
try:
next_index = my_list.index('Guru', next_index + 1)
indices.append(next_index)
except ValueError:
break
print(indices) # [0, 3, 6]
List Comprehension
indices = [i for i, val in enumerate(my_list) if val == 'Guru'] print(indices) # [0, 3, 6]
Использование enumerate()
indices = [i for i, val in enumerate(my_list) if val == 'Guru'] print(indices) # [0, 3, 6]
Использование filter()
indices = list(filter(lambda i: my_list[i] == 'Guru', range(len(my_list)))) print(indices) # [0, 3, 6]
Продвинутые техники
NumPy для больших наборов данных
При работе с числовыми или большими текстовыми данными конвертация списка в NumPy-массив ускоряет поиск.
pip install numpy import numpy as np my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] array = np.array(my_list) indices = np.where(array == 'Guru')[0] print(indices) # [0 3 6]
more_itertools.locate()
Для чистого функционального подхода more_itertools.locate() возвращает итератор индексов, удовлетворяющих предикату.
pip install more_itertools from more_itertools import locate indices = list(locate(my_list, lambda x: x == 'Guru')) print(indices) # [0, 3, 6]
Ключевые выводы
list.index()— самый прямой способ найти первое вхождение значения.- Используйте параметры
startиendдля ограничения диапазона поиска. - Когда элемент встречается много раз, применяйте циклы, list comprehensions,
enumerate(),filter()или внешние библиотеки (NumPy, more_itertools) для сбора всех индексов. - Всегда обрабатывайте
ValueError, когда искомое значение может отсутствовать.
Python
- Освоение std::list в C++: синтаксис, функции и практические примеры
- Мастерство метода strip() в Python: подробное руководство и практические примеры
- Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
- Функция round() в Python: подробное объяснение с практическими примерами
- Освоение функции map() в Python: синтаксис, примеры и лучшие практики
- Python timeit(): измерение времени выполнения с практическими примерами
- Counter в collections Python: эффективное подсчёт, обновление и арифметические операции
- Python list.count(): экспертное руководство с практическими примерами
- Как удалить дубликаты из списка Python: 8 проверенных способов
- Как удалять элементы из списка Python: remove(), pop(), clear() и del