TL; DR: Ausnahmen sind Ihr Freund und der beste Ansatz für die Frage, wie angegeben.
Es ist einfacher, um Vergebung zu bitten als um Erlaubnis (EAFP)
Das OP stellte in einem Kommentar klar, dass es für ihren Anwendungsfall eigentlich nicht wichtig war, den Index zu kennen. Wie die akzeptierte Antwort vermerkt, x in somelistist die Verwendung die beste Antwort, wenn Sie sich nicht darum kümmern.
Aber ich gehe davon aus, dass es Ihnen wichtig ist , was der Index ist , wie die ursprüngliche Frage nahelegt . In diesem Fall muss ich feststellen, dass bei allen anderen Lösungen die Liste zweimal gescannt werden muss, was zu einer erheblichen Leistungsminderung führen kann.
Darüber hinaus schrieb der ehrwürdige Raymond Hettinger in einem Kommentar
Selbst wenn wir list.find hätten, das -1 zurückgibt, müssten Sie immer noch testen, ob i == -1 ist, und etwas unternehmen.
Ich werde also auf die Annahme in der ursprünglichen Frage zurückgreifen, dass Ausnahmen vermieden werden sollten. Ich schlage vor, dass Ausnahmen dein Freund sind. Sie sind nichts, vor dem man Angst haben muss, sie sind nicht ineffizient, und tatsächlich müssen Sie mit ihnen vertraut sein, um guten Code zu schreiben.
Daher denke ich, dass die beste Antwort darin besteht, einfach einen Try-außer-Ansatz zu verwenden:
try:
i = somelist.index(x)
except ValueError:
"damit umgehen " bedeutet nur, das zu tun, was Sie tun müssen: i auf einen Sentinel-Wert setzen, eine eigene Ausnahme auslösen, einem anderen Code-Zweig folgen usw.
Dies ist ein Beispiel dafür, warum das Python-Prinzip Leichter um Vergebung als um Erlaubnis zu bitten (EAFP) sinnvoll ist, im Gegensatz zum Wenn-Dann-Sonst-Stil von Look before you leap (LBYL).