Найти в Дзене

Метод index() в Python, как он работает и где пригодится

Народ, всем привет. Есть такой метод index(), по факту один из тех инструментов Python, которые кажутся простыми, но нередко вызывают вопросы у начинающих. Он встречается во множестве коллекций, списках, строках, кортежах. Его основная задача найти позицию элемента по его значению. Но за этим коротким описанием скрывается ряд тонкостей, которые стоит знать, и сегодня мы разберём с вами, как работает index(), какие у него параметры, как он ведёт себя при ошибках и где он особенно полезен. Ну что, погнали? Если говорить проще, метод index() ищет заданное значение в последовательности (например, в списке или строке) и возвращает индекс (номер позиции) первого совпадения. Простейший пример: numbers = [10, 20, 30, 20, 40] print(numbers.index(20)) # => 1 Python нашёл число 20 в списке numbers и вернул индекс 1, потому что нумерация элементов начинается с нуля, а первое вхождение 20 стоит на второй позиции. Если в последовательности встречается несколько одинаковых элементов, index() вернёт
Оглавление

Народ, всем привет. Есть такой метод index(), по факту один из тех инструментов Python, которые кажутся простыми, но нередко вызывают вопросы у начинающих. Он встречается во множестве коллекций, списках, строках, кортежах. Его основная задача найти позицию элемента по его значению. Но за этим коротким описанием скрывается ряд тонкостей, которые стоит знать, и сегодня мы разберём с вами, как работает index(), какие у него параметры, как он ведёт себя при ошибках и где он особенно полезен. Ну что, погнали?

Что делает метод index()

Если говорить проще, метод index() ищет заданное значение в последовательности (например, в списке или строке) и возвращает индекс (номер позиции) первого совпадения. Простейший пример:

numbers = [10, 20, 30, 20, 40]
print(numbers.index(20)) # => 1

Python нашёл число 20 в списке numbers и вернул индекс 1, потому что нумерация элементов начинается с нуля, а первое вхождение 20 стоит на второй позиции. Если в последовательности встречается несколько одинаковых элементов, index() вернёт только первое вхождение.

-2

sequence.index(value, start, end)

  • value — значение, которое нужно найти.
  • start (необязательный) — индекс, с которого начать поиск.
  • end (необязательный) — индекс, на котором закончить поиск (не включая его).

Эти параметры полезны, если нужно найти не первое, а второе или третье вхождение элемента. Также можно искать не только с начала списка, но и в любой его части.

numbers = [10, 20, 30, 20, 40, 20]

# Найдём первое вхождение 20

print(numbers.index(20)) # => 1

# Найдём следующее вхождение после индекса 2

print(numbers.index(20, 2)) # => 3

# Поиск в диапазоне индексов 4–6

print(numbers.index(20, 4)) # => 5
-3

Если Вам нравятся наши статьи, и вы хотите отблагодарить автора (на развитие канала), нам будет очень приятно!

Что происходит, если элемент не найден

Если элемент в последовательности отсутствует, метод index() вызывает ошибку ValueError.

numbers = [1, 2, 3]
print(numbers.index(5))
# ValueError: 5 is not in list

Поэтому, если есть вероятность, что элемента может не быть, стоит использовать конструкцию try-except:

numbers = [1, 2, 3]
try:
idx = numbers.index(5)
print("Элемент найден на позиции:", idx)
except ValueError:
print("Элемент не найден.")

Альтернатива, если нужно просто проверить наличие элемента, лучше использовать оператор in:

if 5 in numbers:
print(numbers.index(5))
else:
print("Элемента нет")
-4

Метод index() для строк

Метод index() также работает для строк и ищет подстроку внутри строки.

text = "Python is powerful"
print(text.index("is")) # => 7

Здесь index() вернул 7, потому что подстрока "is" начинается с 7-го символа (счёт с нуля). Можно указать диапазон поиска:

text = "banana"
print(text.index("a", 2)) # => 3
print(text.index("a", 4, 6)) # => 5

Метод index() для кортежей

Кортежи (tuple) в Python — тоже последовательности, поэтому index() работает аналогично:

coords = (2, 4, 6, 8, 10, 6)
print(coords.index(6)) # => 2
print(coords.index(6, 3)) # => 5

Те же правила, что и у списков? возвращается первое вхождение, можно указывать диапазон, ошибка — ValueError.

-5

Особенности метода

Метод index() выполняет линейный поиск, он проверяет элементы по одному, пока не найдёт нужный. Это значит, что сложность операции — O(n), где n — количество элементов. Для небольших коллекций это неважно, но при работе с большими списками лучше использовать словари (dict) или

Самые частые ошибки, которые делают новички, это ожидают, что index() вернёт все вхождения. Но на самом деле он возвращает только первое. Чтобы найти все, можно использовать список с индексами:

nums = [1, 2, 3, 2, 4, 2]
positions = [i for i, x in enumerate(nums) if x == 2]
print(positions) # => [1, 3, 5]

Также путают find() и index() в строках. Помните, что find() безопаснее при отсутствии значения (возвращает -1), index() строже (вызывает ошибку). Ну и еще забывают об in перед index(). Лучше сначала проверить наличие элемента, чтобы не ловить исключения. Понимая механику index(), можно избежать многих ошибок и написать код, который читается интуитивно и работает предсказуемо.

-6

Кстати, у нас есть и другой канал, FIT FOR FUN, про фитнес, бодибилдинг, правильное питание, похудение и ЗОЖ в целом. Кому интересно, ждем вас в гости!