Мне нужно фильтровать большие списки несколько раз, но меня беспокоит как простота кода и оперативность исполнения. В качестве примера:
all_things # huge collection of all things
# inefficient but clean code
def get_clothes():
return filter(lambda t: t.garment, allThings)
def get_hats():
return filter(lambda t: t.headgear, get_clothes())
меня беспокоит то, что я перебираю список одежды, хотя на самом деле он уже пересматривался. Я также хочу разделить две операции фильтра, поскольку они принадлежат к двум разным классам, и я не хочу дублировать первую лямбда-функцию в классе шляп.
# efficient but duplication of code
def get_clothes():
return filter(lambda t: t.garment, allThings)
def get_hats():
return filter(lambda t: t.headgear and t.garment, allThings)
Я исследовал генераторные функции, так как они казались наиболее подходящими, но я пока не понял, как это сделать.