Je veux compter combien de membres d'un itératif répondent à une condition donnée. Je voudrais le faire d'une manière claire et simple et de préférence raisonnablement optimale.Quelle est une bonne façon de faire countif en Python
Mes meilleures idées sont:
sum(meets_condition(x) for x in my_list)
et
len([x for x in my_list if meets_condition(x)])
Le premier étant basé iterator est probablement plus rapide pour les grandes listes. Et c'est la même forme que celle que vous utiliseriez pour tester tout et n'importe quoi. Cependant, cela dépend du fait que int (True) == 1, ce qui est quelque peu laide.
La seconde me semble plus facile à lire, mais elle est différente de toutes les formes.
Quelqu'un a-t-il de meilleures suggestions? Y at-il une fonction de bibliothèque quelque part qui me manque?
carte et filtre à mal vu ces jours-ci en faveur de la liste et compréhensions générateurs –
@tolomea: true (on sait que Guido ne les aime pas cela vaut beaucoup: voir http://www.artima.com/weblogs/viewpost.jsp?thread=98196), mais actuellement, il est prévu de supprimer uniquement «reduce». Cela étant dit, comme dans ma réponse, je pense que «sum (meets_condition (x) for x in my_list)» est la meilleure solution dans ce cas précis. – ChristopheD
réduire n'est pas vraiment 'planifié pour suppression', il vient d'être déplacé vers le module functools dans 3.x. –