Me encontré con una necesidad básica de filtrado: tengo una lista y tengo que filtrarla por un atributo de los elementos.
Mi código se veía así:
my_list = [x for x in my_list if x.attribute == value]
Pero luego pensé, ¿no sería mejor escribirlo así?
my_list = filter(lambda x: x.attribute == value, my_list)
Es más legible, y si es necesario para el rendimiento, se podría sacar la lambda para obtener algo.
La pregunta es: ¿hay alguna advertencia al usar la segunda forma? ¿Alguna diferencia de rendimiento? ¿Me estoy perdiendo el Pythonic Way ™ por completo y debería hacerlo de otra manera (como usar itemgetter en lugar de lambda)?
filter
es un objeto generador de filtro, no una lista.
filter
era más legible. Cuando tiene una expresión simple que se puede usar como está en una listacomp, pero tiene que estar envuelta en una lambda (o construida de manera similar a partir departial
ooperator
funciones, etc.) para pasarfilter
, entonces es cuando ganan las listas.