logo Информатика с Натальей Массальской

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))

‎

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

Предыдущий Следующий
Все посты проекта
0 комментариев

Подарить подписку

Будет создан код, который позволит адресату получить бесплатный для него доступ на определённый уровень подписки.

Оплата за этого пользователя будет списываться с вашей карты вплоть до отмены подписки. Код может быть показан на экране или отправлен по почте вместе с инструкцией.

Будет создан код, который позволит адресату получить сумму на баланс.

Разово будет списана указанная сумма и зачислена на баланс пользователя, воспользовавшегося данным промокодом.

Добавить карту
0/2048