Le list.index(x)
Python lève une exception si l'élément n'existe pas. Existe-t-il une meilleure façon de procéder qui ne nécessite pas de gérer les exceptions ?
Réponses
Trop de publicités?Si vous ne vous souciez pas de l'emplacement de l'élément correspondant, utilisez :
found = x in somelist
Si vous vous en souciez, utilisez un style LBYL avec une expression conditionnelle :
i = somelist.index(x) if x in somelist else None
implémenter votre propre index pour la liste ?
class mylist(list):
def index_withoutexception(self,i):
try:
return self.index(i)
except:
return -1
Ainsi, vous pouvez utiliser list, et avec votre index2, retourner ce que vous voulez en cas d'erreur.
Vous pouvez l'utiliser comme ceci :
l = mylist([1,2,3,4,5]) # This is the only difference with a real list
l.append(4) # l is a list.
l.index_withoutexception(19) # return -1 or what you want
Oui il y a. Vous pouvez par ex. faire quelque chose de similaire à ceci :
test = lambda l, e: l.index(e) if e in l else None
qui fonctionne comme ça :
>>> a = ['a', 'b', 'c', 'g', 'c']
>>> test(a, 'b')
1
>>> test(a, 'c')
2
>>> test(a, 't')
None
Donc, fondamentalement, test()
renverra l'index de l'élément (deuxième paramètre) dans la liste donnée (premier paramètre), à moins qu'il n'ait pas été trouvé (dans ce cas, il renverra None
, mais cela peut être tout ce que vous trouvez approprié).