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?

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):

1
Correction: si vous comptez utiliser True in ..., reconsidérez et utilisez à la anyplace.
Aran-Fey


10

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.