Por acaso, encontrei uma necessidade básica de filtragem: tenho uma lista e tenho que filtrá-la por um atributo dos itens.
Meu código ficou assim:
my_list = [x for x in my_list if x.attribute == value]
Mas então pensei: não seria melhor escrever assim?
my_list = filter(lambda x: x.attribute == value, my_list)
É mais legível e, se necessário para o desempenho, o lambda pode ser retirado para obter algo.
A pergunta é: existem algumas ressalvas no uso da segunda maneira? Alguma diferença de desempenho? Estou sentindo falta do Pythonic Way ™ inteiramente e devo fazê-lo de outra maneira (como usar o itemgetter em vez do lambda)?
filteré um objeto gerador de filtro e não uma lista.
filterera mais legível. Quando você tem uma expressão simples que pode ser usada como está em um listcomp, mas precisa ser empacotada em um lambda (ou similarmente construído compartialouoperatorfunções, etc.) para passarfilter, é quando os listcomps vencem.