def argmin_list(gen, fn):
    """Return a list of elements of gen with the lowest fn(x) scores.
    Ex: argmin_list(['one', 'to', 'three', 'or'], len) ==>  ['to', 'or']"""
    best_score, best = fn(gen.next()), []
    for x in gen:
        x_score = fn(x)
        if x_score < best_score:
            best, best_score = [x], x_score
        elif x_score == best_score:
            best.append(x)
    return best