Оптимизация списков фильтрации в Python 2.7

Мне нужно фильтровать большие списки несколько раз, но меня беспокоит как простота кода и оперативность исполнения. В качестве примера:

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)

Я исследовал генераторные функции, так как они казались наиболее подходящими, но я пока не понял, как это сделать.

9
задан cammil 27 April 2012 в 11:33
поделиться