itertools.ifilter Vs. filtre de Vs. interprétations de la liste

Je suis en train de devenir de plus en plus familiers avec le itertools module et ont trouvé une fonction appelée ifilter.

De ce que je comprends, c'filtres et itératif basé sur la fonction donnée et renvoie un itérateur sur une liste contenant les éléments de l'objet iterable sur lequel la fonction est évaluée à True.

Question 1: ma connaissance, jusqu'à présent correct?

Question 2: hormis le fait que ce retourne et itérateur, comment est-il différent de l'intégré dans filter fonction?

Question 3 Qui est le plus rapide?

De ce que je peux dire, il ne l'est pas. Ai-je raté quelque chose? (J'ai couru à la suite de l'essai)

>>> itertools.ifilter(lambda x: x%2, range(5))
<itertools.ifilter object at 0x7fb1a101b210>
>>> for i in itertools.ifilter(lambda x: x%2, range(5)): print i
... 
1
3
>>> filter(lambda x: x%2, range(5))
[1, 3]
>>> function = lambda x: x%2
>>> [item for item in range(5) if function(item)]
[1,3]
  • Quelle sortie vous attendiez-vous? range(5) vous donnera [0,1,2,3,4].
  • notez que la plupart des usages de filtre peut être remplacé par un garde sur un générateur d'expression de liste: list(x for x in range(5) if x%2)