J'ai du code qui ressemble à ceci:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
ok donc c'est simplifié mais vous voyez l'idée. Maintenant, il se thing
peut que ce ne soit pas réellement dans la liste, auquel cas je veux passer -1 comme thing_index
. Dans d'autres langues, c'est ce que vous vous attendez index()
à retourner s'il ne trouve pas l'élément. En fait, il jette un ValueError
.
Je pourrais faire ceci:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Mais cela semble sale, en plus je ne sais pas si cela ValueError
pourrait être élevé pour une autre raison. J'ai proposé la solution suivante basée sur les fonctions du générateur, mais cela me semble un peu complexe:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Existe-t-il un moyen plus propre d'atteindre la même chose? Supposons que la liste n'est pas triée.
str.find
méthode qui fait exactement cela: retourne -1
lorsque l'aiguille n'est pas trouvée dans le sujet.
str.index()
lève une exception si la chaîne de recherche est introuvable.
thing_index
." - C'est définitivement anti-pythonique. Passer une valeur de jeton (sans signification) au cas où une opération échouerait est mal vu - les exceptions sont vraiment la bonne façon ici. D'autant quething_list[-1]
c'est une expression valide, c'est-à-dire la dernière entrée de la liste.