Ich habe Code, der ungefähr so aussieht:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
ok also das ist vereinfacht aber du kommst auf die idee. Jetzt ist thing
möglicherweise nicht wirklich in der Liste, in diesem Fall möchte ich -1 als übergeben thing_index
. In anderen Sprachen ist dies das, was Sie erwarten würden index()
, wenn das Element nicht gefunden werden könnte. In der Tat wirft es ein ValueError
.
Ich könnte das tun:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Aber das fühlt sich schmutzig an und ich weiß nicht, ob ValueError
es aus einem anderen Grund angehoben werden könnte. Ich habe die folgende Lösung basierend auf Generatorfunktionen entwickelt, die jedoch etwas komplex erscheint:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Gibt es einen saubereren Weg, um dasselbe zu erreichen? Nehmen wir an, die Liste ist nicht sortiert.
str.find
Methode, die genau das tut: Gibt zurück, -1
wenn die Nadel im Betreff nicht gefunden wird.
str.index()
löst eine Ausnahme aus, wenn die Suchzeichenfolge nicht gefunden wird.
thing_index
." - Das ist definitiv unpythonisch. Das Übergeben eines (bedeutungslosen) Token-Werts für den Fall, dass eine Operation nicht erfolgreich ist, ist verpönt - Ausnahmen sind hier wirklich der richtige Weg. Zumalthing_list[-1]
es sich um einen gültigen Ausdruck handelt, der den letzten Eintrag in der Liste bedeutet.