Je me suis trouvé avoir un besoin de filtrage de base: j'ai une liste et je dois la filtrer par un attribut des éléments.
Mon code ressemblait à ceci:
my_list = [x for x in my_list if x.attribute == value]
Mais alors j'ai pensé, ne serait-il pas préférable de l'écrire comme ça?
my_list = filter(lambda x: x.attribute == value, my_list)
C'est plus lisible, et si nécessaire pour la performance, le lambda pourrait être retiré pour gagner quelque chose.
La question est: y a-t-il des réserves à utiliser la deuxième façon? Une différence de performance? Suis-je complètement absent du Pythonic Way ™ et dois-je le faire d'une autre manière (comme utiliser itemgetter au lieu du lambda)?
filter
est un objet générateur de filtre et non une liste.
filter
c'était plus lisible. Lorsque vous avez une expression simple qui peut être utilisée telle quelle dans un listcomp, mais doit être enveloppée dans un lambda (ou construit de manière similaire à partir departial
ou desoperator
fonctions, etc.) pour passerfilter
, c'est là que les listcomps gagnent.