В Python find
и index
- очень похожие методы, используемые для поиска значений в типе последовательности. find
используется для строк, а index
- для списков и кортежей. Они оба возвращают наименьший индекс (самый дальний слева влево), который найден аргумент, предоставленный.
Например, оба из следующих возвратят 1
:
"abc".find("b")
[1,2,3].index(2)
Однако, одна вещь, о которой я несколько смущаюсь, состоит в том, что, хотя эти два метода очень похожи и заполняют почти ту же роль, только для разных типов данных, они имеют очень разные реакции на попытку найти что-то не в последовательность.
"abc".find("d")
Возвращает -1
, чтобы обозначить "не найден", а
[1,2,3].index(4)
вызывает исключение.
В принципе, почему у них разные виды поведения? Есть ли какая-то конкретная причина, или это просто странная несогласованность без особых причин?
Теперь я не спрашиваю, как бороться с этим – очевидно, будет работать блок try
/except
или условный оператор in
. Я просто спрашиваю, в чем причина, почему поведение в этом конкретном случае различно. Для меня было бы разумнее иметь определенное поведение, чтобы сказать не найденное, для обеспечения последовательности.
Кроме того, я не прошу мнения о том, является ли причина хорошей причиной или нет. Мне просто интересно, в чем причина.
Изменить: Некоторые указали, что строки также имеют метод index
, который работает как метод index
для списков, который я признаю, что я не знал, но это просто заставляет меня задаться вопросом, почему, если строки имеют оба, списки имеют только index
.