Я думаю, что причина отсутствия отдельных методов 'find' и 'index' в том, что они недостаточно различны. Оба вернут одно и то же в случае, если искомый элемент существует в списке (это верно для двух строковых методов); они отличаются в случае, если искомого элемента нет в списке / строке; однако вы можете тривиально построить любой из find / index из другого. Если вы работаете с другими языками, может показаться плохим манер поднимать и отлавливать исключения для условия без ошибок, которое вы могли бы легко проверить, но в Python часто считается более питоническим стрелять первым и задавать вопросы позже. , использовать обработку исключений вместо тестов, подобных этому (пример: Лучше «попробовать» что-то и поймать исключение или проверить, если это возможно, сначала, чтобы избежать исключения? ).
Я не думаю, что это хорошая идея для построения 'find' из 'index' и 'in', например
if foo in my_list:
foo_index = my_list.index(foo)
else:
foo_index = -1 # or do whatever else you want
потому что и in, и index потребуют пропустить O (n) по списку.
Лучше построить 'find' из 'index' и try / catch, например:
try:
foo_index = my_list.index(foo)
catch ValueError:
foo_index = -1 # or do whatever else you want
Теперь о том, почему список был построен таким образом (только с индексом), а строка была создана другим способом (с отдельным индексом и находкой) ... Я не могу сказать.