У мене трапилося, що у мене є основна потреба у фільтрації: у мене є список, і я мушу відфільтрувати його за атрибутом елементів.
Мій код виглядав так:
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 виграє.