Index: примеры (PYTHON)
index(value[, start[, stop]]): intФункция index в Python
Метод index() применяется к последовательностям (строкам, спискам, кортежам) и выполняет поиск указанного элемента. Основное назначение - определение первого вхождения заданного значения в последовательности. Функция возвращает позицию (индекс) элемента, если он присутствует.
Использование метода уместно при необходимости установить местоположение конкретного объекта в коллекции. Это часто применяется при обработке строк, анализе списков и проверке наличия данных с получением их точной позиции.
Аргументы функции
- value (обязательный): Элемент, позицию которого требуется обнаружить в последовательности.
- start (необязательный): Индекс начала поиска (по умолчанию 0). Поиск начинается с этой позиции включительно.
- end (необязательный): Индекс окончания поиска (по умолчанию длина последовательности). Поиск выполняется до этой позиции, исключая её.
Возвращаемое значение
Метод возвращает целое число - минимальный индекс, по которому находится искомый элемент в пределах указанного диапазона. Если элемент отсутствует, возникает исключение ValueError.
Примеры применения метода index
Поиск в списке с указанием границ:
fruits = ['apple', 'banana', 'cherry', 'banana', 'date']
# Простой поиск
print(fruits.index('banana'))1
Поиск с начальным индексом:
print(fruits.index('banana', 2))3
Поиск с диапазоном:
print(fruits.index('banana', 1, 4))1
Работа со строками:
text = "Hello, world!"
print(text.index('o'))
print(text.index('o', 5))4 8
Использование с кортежами:
numbers = (10, 20, 30, 20, 40)
print(numbers.index(20))1
Альтернативные функции в Python
find() - метод строк, аналогичный index(), но возвращающий -1 при отсутствии элемента вместо исключения. Подходит для случаев, когда нежелательно обрабатывать ошибки.
rindex() - находит последнее вхождение элемента в строке. Также вызывает ValueError при отсутствии.
rfind() - возвращает последнюю позицию элемента в строке или -1 при его отсутствии.
enumerate() с условием - полезен для получения всех вхождений элемента с их индексами.
Оператор in - проверяет наличие элемента без определения позиции, что эффективнее при простой проверке.
Типичные ошибки при использовании
Обработка отсутствующего элемента без перехвата исключения:
items = [1, 2, 3]
print(items.index(4))ValueError: 4 is not in list
Некорректные границы поиска:
data = [10, 20, 30]
print(data.index(20, 2, 3)) # Элемент 20 вне диапазонаValueError: 20 is not in list
Применение к изменяемой последовательности во время итерации (риск изменения индексов) - ошибка логики, а не синтаксиса.
Изменения в последних версиях Python
В Python 3.10 улучшены сообщения об ошибках для метода index(). При возникновении ValueError текст стал более информативным, особенно для строк.
# Python 3.10+
"abc".index("d")ValueError: substring not found
Ранее в Python 3.9 и старее сообщение было менее конкретным. Существенных изменений в аргументах или поведении функции не происходило.
Расширенные примеры использования
Поиск всех вхождений элемента с использованием генератора и enumerate:
def all_indexes(seq, item):
return [i for i, x in enumerate(seq) if x == item]
sample = [1, 2, 3, 2, 4, 2, 5]
print(all_indexes(sample, 2))[1, 3, 5]
Использование в условиях с обработкой исключений:
def safe_index(seq, item, default=-1):
try:
return seq.index(item)
except ValueError:
return default
print(safe_index([1, 2, 3], 4))-1
Поиск в списке словарей по ключу:
users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
target_id = 2
index = next((i for i, d in enumerate(users) if d['id'] == target_id), None)
print(index)1
Рекурсивный поиск во вложенных последовательностях:
def deep_index(nested_seq, target, path=()):
for i, item in enumerate(nested_seq):
if item == target:
return path + (i,)
if isinstance(item, (list, tuple)):
result = deep_index(item, target, path + (i,))
if result:
return result
return None
nested = [1, [2, 3, [4, 5]], 6]
print(deep_index(nested, 5))(1, 2, 1)
Использование с срезами для поиска после определенной позиции:
data = 'abacabadabacaba'
pos = -1
while True:
try:
pos = data.index('a', pos + 1)
print(f"Найдено на позиции: {pos}")
except ValueError:
breakНайдено на позиции: 0 Найдено на позиции: 2 Найдено на позиции: 4 Найдено на позиции: 6 Найдено на позиции: 8 Найдено на позиции: 10 Найдено на позиции: 12 Найдено на позиции: 14
Аналоги в других языках программирования
PHP: функция array_search() возвращает ключ первого найденного значения, или false при отсутствии.
$arr = ['a', 'b', 'c'];
echo array_search('b', $arr);1
JavaScript: метод indexOf() возвращает индекс или -1.
let arr = ['a', 'b', 'c'];
console.log(arr.indexOf('b'));1
Java: метод indexOf() для строк и List.indexOf() для коллекций.
List list = List.of("a", "b", "c");
System.out.println(list.indexOf("b")); 1
SQL: функция INSTR() (или CHARINDEX() в SQL Server) возвращает позицию подстроки.
SELECT INSTR('abcdef', 'c');3
C#: метод IndexOf() для массивов и строк.
int[] arr = {1, 2, 3};
Console.WriteLine(Array.IndexOf(arr, 2));1
Lua: функция string.find() возвращает начальную и конечную позицию.
print(string.find("hello", "l"))3 3
Go: пакет strings содержит функцию Index().
import "strings"
fmt.Println(strings.Index("hello", "l"))2
Kotlin: метод indexOf() для коллекций и строк.
val list = listOf("a", "b", "c")
println(list.indexOf("b"))1