24 дек 2024
1 минута

Python: .index() и .find() для поиска в коллекции

💾 Методы .index() и .find() делают одно и то же — ищут первое вхождение чего-либо в свою коллекцию. Только .index() применяется к списку и ищет элемент, а .find() работает со строкой и ищет в ней подстроку.

список.index(элемент)
строка.find(подстрока)

Вот пример:

s = '12345'
x = [1, 2, 3, 4, 5]
print(s.find('3'), x.index(3))

Получим 2 и 2, потому что нумерация элементов и в строках, и в списках идёт с нуля.

Но что будет при использовании методов .index() и .find(), если такого элемента или такой подстроки нет?

Например, для строки и списка из примера выше:

s = '12345'
x = [1, 2, 3, 4, 5]

print(s.find('7'))
print(x.index(7))

Метод .find() для отсутствующей строки вернёт -1. Почему не ноль? Потому что нулевая позиция существует.

А вот .index() для отсутствующего элемента сгенерирует ошибку. Проще говоря, программа обругает вас и упадёт, вот так:

ValueError: 7 is not in list

Как же бороться с падением программы при использовании .index()? Запросто! Мы должны сначала проверить, есть ли вообще такое значение в списке. И только убедившись, что есть — определяем его позицию:

x = [1, 2, 3, 4, 5]
if 7 in x:
    print(x.index(7))

Теперь вы точно знаете, как искать элемент в коллекции 👍

Бесплатный
Комментарии
Здесь будут комментарии к публикации