112 votes

Python : retourner l'index du premier élément d'une liste qui rend une fonction passée vraie

En list.index(x) renvoie l'indice dans la liste du premier élément dont la valeur est x .

Existe-t-il une fonction, list_func_index() , similaire à la index() qui a une fonction, f() comme paramètre. La fonction, f() est exécuté sur chaque élément, e de la liste jusqu'à ce que f(e) retours True . Ensuite list_func_index() renvoie l'index de e .

Codewise :

>>> def list_func_index(lst, func):
      for i in range(len(lst)):
        if func(lst[i]):
          return i
      raise ValueError('no element making func True')

>>> l = [8,10,4,5,7]
>>> def is_odd(x): return x % 2 != 0
>>> list_func_index(l,is_odd)
3

Existe-t-il une solution plus élégante ? (et un meilleur nom pour la fonction)

0voto

Vincent Osinga Points 789

Vous pourriez le faire avec une liste-compréhension :

l = [8,10,4,5,7]
filterl = [a for a in l if a % 2 != 0]

Ensuite, filterl renverra tous les membres de la liste répondant à l'expression a % 2 != 0. Je dirais qu'une méthode plus élégante...

0voto

YazanGhafir Points 31

Solution intuitive en une ligne :

i = list(map(lambda value: value > 0, data)).index(True)

Explication :

  1. Nous utilisons la fonction map pour créer une liste contenant des Vrai ou des Faux selon que chaque élément de notre liste satisfait ou non à la condition énoncée dans l'expression lambda.
  2. puis nous convertissons la sortie de la carte en liste
  3. puis en utilisant la fonction index, nous obtenons l'index du premier vrai qui est le même index que la première valeur qui passe la condition.

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