Quiero contar cuántos miembros de un iterable cumplen una condición dada. Me gustaría hacerlo de una manera que sea clara y simple y preferiblemente razonablemente óptima.Cuál es una buena manera de hacer el countif en Python
Mis mejores ideas actuales son:
sum(meets_condition(x) for x in my_list)
y
len([x for x in my_list if meets_condition(x)])
El ser una primera iterador basada presumiblemente es más rápido para grandes listas. Y es la misma forma que usarías para probar cualquiera. Sin embargo, depende del hecho de que int (True) == 1, que es algo feo.
El segundo me parece más fácil de leer, pero es diferente de todas las formas.
¿Alguien tiene alguna sugerencia mejor? ¿Hay una función de biblioteca en alguna parte que me falta?
mapa y filtro parecen estar mal visto en estos días en favor de las listas por comprensión y generadores –
@tolomea: verdadero (se sabe que Guido no le gustan tanto: ver http://www.artima.com/weblogs/viewpost.jsp?thread=98196) aunque actualmente solo está programado la eliminación de 'reduce'. Dicho esto, como en mi respuesta, creo que 'sum (meets_condition (x) for x in my_list)' es la mejor solución en este caso específico. – ChristopheD
reducir no está realmente 'programado para su eliminación', simplemente se ha movido al módulo functools en 3.x. –