Méthode pythonique de vérifier si une condition est vérifiée pour n'importe quel élément d'une liste

111

J'ai une liste en Python et je veux vérifier si des éléments sont négatifs. Specman a la has()méthode pour les listes qui fait:

x: list of uint;
if (x.has(it < 0)) {
    // do something
};

itest un mot-clé Specman mappé à chaque élément de la liste à son tour.

Je trouve cela plutôt élégant. J'ai parcouru la documentation Python et je n'ai rien trouvé de similaire. Le mieux que j'ai pu trouver était:

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 faire cela en Python?

Nathan Fellman
la source

Réponses:

187

any () :

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

De plus, si vous allez utiliser "True in ...", faites-en une expression de générateur pour qu'elle ne prenne pas de mémoire O (n):

if True in (t < 0 for t in x):
Ken
la source
1
Correction: si vous comptez utiliser True in ..., reconsidérez et utilisez à la anyplace.
Aran-Fey
29

Utilisez any().

if any(t < 0 for t in x):
    # do something
Daniel Pryden
la source
10

Python a une fonction intégrée any () dans ce but précis.

Rory
la source
2.5+ uniquement. Sinon, vous devez créer une fonction, peut-être en utilisant ifilter et exceptions, ou bool (set ((x for x if cond))) ou autre.
Gregg Lind
1
Plutôt qu'une chose compliquée ifilter, faites simplement: def any (it): for el in it: if el: return True; retour False
Rory