378 votes

trouver le premier élément de la liste qui correspond aux critères

Ce qui serait le plus élégant et le plus efficace moyen de trouver\retourner le premier élément de la liste qui correspond à certains critères?

Par exemple, si j'ai une liste d'objets, et je voudrais obtenir le premier objet de ceux avec l'attribut obj.val==5. Je pourrais bien sûr utiliser compréhension de liste, mais ce serait encourir O(n) et si n est grand, il est un gaspillage. Je pourrais aussi utiliser une boucle avec break une fois que les critères étaient remplis, mais j'ai pensé qu'il pourrait y avoir un plus pythonic\solution élégante.

691voto

eumiro Points 56644

Si vous ne disposez pas d'autres index ou informations triées pour vos objets, vous devrez effectuer une itération jusqu'à ce qu'un objet soit trouvé:

 next(obj for obj in objs if obj.val==5)
 

C'est cependant plus rapide qu'une compréhension complète de la liste. Comparez ces deux:

 [i for i in xrange(100000) if i == 1000][0]

next(i for i in xrange(100000) if i == 1000)
 

Le premier nécessite 5,75 ms, le second 58,3 μs (100 fois plus rapide car la boucle est 100 fois plus courte).

3voto

Ashwini Chaudhary Points 94431
 a=[100,200,300,400,500]
def search(b):
 try:
  k=a.index(b)
  return a[k] 
 except ValueError:
    return 'not found'
print(search(500))
 

il retournera l'objet s'il a été trouvé sinon il retournera "non trouvé"

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