J'apprends le concept de filtres en Python. Je cours un code simple comme ceci.
>>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
Mais au lieu d’obtenir une liste, je reçois un message comme celui-ci.
<filter object at 0x00FDC550>
Qu'est-ce que ça veut dire? Est-ce que cela signifie que mon objet filtré, c'est-à-dire la liste à sortir, est stocké à cet emplacement de mémoire? Comment puis-je obtenir la liste dont j'ai besoin?
On dirait que vous utilisez python 3.x. En python3, filter
, map
, Zip
, etc., renvoie un objet qui est éditable, mais pas une liste. En d’autres termes,
filter(func,data) #python 2.x
est équivalent à:
list(filter(func,data)) #python 3.x
Je pense que cela a été changé parce que vous voulez (souvent) faire le filtrage dans un sens paresseux - vous n'avez pas besoin de consommer toute la mémoire pour créer une liste à l'avance, tant que l'itérateur renvoie la même chose une liste serait pendant l'itération.
Si vous êtes familier avec les compréhensions de liste et les expressions de générateur, le filtre ci-dessus est maintenant (presque) équivalent au suivant dans python3.x:
( x for x in data if func(x) )
Par opposition à:
[ x for x in data if func(x) ]
dans python 2.x