Index: примеры (PYTHON)

Работа с методом 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:

Пример python
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]

Использование в условиях с обработкой исключений:

Пример python
def safe_index(seq, item, default=-1):
    try:
        return seq.index(item)
    except ValueError:
        return default

print(safe_index([1, 2, 3], 4))
-1

Поиск в списке словарей по ключу:

Пример python
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

Рекурсивный поиск во вложенных последовательностях:

Пример python
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)

Использование с срезами для поиска после определенной позиции:

Пример python
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

питон index function comments

En
Index Find first occurrence