113 votes

fonction list.index () pour Python qui ne lève pas d'exception lorsque rien n'est trouvé

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 ?

117voto

Raymond Hettinger Points 50330

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

7voto

A.H Points 240

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

4voto

Mark Byers Points 318575

Écrivez une fonction qui fait ce dont vous avez besoin :

 def find_in_iterable(x, iterable):
    for i, item in enumerate(iterable):
        if item == x:
            return i
    return None

Si vous avez seulement besoin de savoir si l'élément existe, mais pas l'index, vous pouvez utiliser in :

 x in yourlist

3voto

Tadeck Points 37046

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é).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X