У меня та же проблема с методом ".index ()" в списках. У меня нет проблем с тем, что он генерирует исключение, но я категорически не согласен с тем фактом, что это неописательная ошибка ValueError. Я мог бы понять, если бы это была ошибка IndexError.
Я понимаю, почему возвращение «-1» также будет проблемой, потому что это корректный индекс в Python. Но на самом деле я никогда не ожидаю, что метод ".index ()" вернет отрицательное число.
Здесь идет одна строка (хорошо, это довольно длинная строка ...), проходит по списку ровно один раз и возвращает «Нет», если элемент не найден. Было бы тривиально переписать его, чтобы вернуть -1, если вы этого пожелаете.
indexOf = lambda list, thing: \
reduce(lambda acc, (idx, elem): \
idx if (acc is None) and elem == thing else acc, list, None)
Как использовать:
>>> indexOf([1,2,3], 4)
>>>
>>> indexOf([1,2,3], 1)
0
>>>