Я обнаружил, что у меня есть базовая потребность в фильтрации: у меня есть список, и я должен отфильтровать его по атрибуту элементов.
Мой код выглядел так:
my_list = [x for x in my_list if x.attribute == value]
Но тогда я подумал: не лучше ли написать это так?
my_list = filter(lambda x: x.attribute == value, my_list)
Это более читабельно, и если нужно для производительности, лямбда может быть извлечена, чтобы получить что-то.
Вопрос: есть ли какие-то предостережения при использовании второго способа? Есть разница в производительности? Я полностью пропускаю Pythonic Way ™ и должен сделать это еще одним способом (например, использовать itemgetter вместо лямбды)?
filter
является объектом генератора фильтров, а не списком.
filter
было более читабельным. Если у вас есть простое выражение, которое можно использовать как есть в listcomp, но его нужно заключить в лямбду (или аналогично сконструировать изpartial
илиoperator
функций и т. Д.) Для передачиfilter
, то тогда listcomps победит.