167 votes

Méthode pythonique pour vérifier si une condition s'applique à tout élément d'une liste.

J'ai une liste en Python, et je veux vérifier si certains éléments sont négatifs. Existe-t-il une fonction ou une syntaxe simple que je puisse utiliser pour appliquer la vérification "est négatif" à tous les éléments, et voir si l'un d'entre eux est négatif ? J'ai regardé dans le la documentation et n'a rien trouvé de similaire. Le mieux que j'ai pu trouver est :

if (True in [t < 0 for t in x]):
    # do something

Je trouve cela plutôt inélégant. Existe-t-il une meilleure façon de procéder en Python ?


Les réponses existantes utilisent la fonction intégrée <code>any</code> pour effectuer l'itération. Voir <a href="https://stackoverflow.com/questions/19389490">Comment fonctionnent les fonctions any et all de Python ? </a>pour une explication de la <code>any</code> et son équivalent, <code>all</code> .

Si la condition que vous voulez vérifier est "se trouve dans un autre conteneur", voir <a href="https://stackoverflow.com/questions/740287">Comment vérifier si l'un des éléments suivants se trouve dans une liste ? </a>et son équivalent, <a href="https://stackoverflow.com/questions/3931541/">Comment vérifier si tous les éléments suivants se trouvent dans une liste ? </a>. En utilisant <code>any</code> y <code>all</code> fonctionnera, mais des solutions plus efficaces sont possibles.

267voto

Ken Points 1584

any() :

if any(t < 0 for t in x):
    # do something

De même, si vous utilisez "True in ...", faites-en une expression génératrice afin qu'elle ne prenne pas O(n) en mémoire :

if True in (t < 0 for t in x):

41voto

Daniel Pryden Points 22167

Utilice any() .

if any(t < 0 for t in x):
    # do something

11voto

Rory Points 8667

Python dispose d'une fonction intégrée any() à cette fin.

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