def left_partials(incoming):
    product = 1
    for i in incoming:
        product *= i
        yield product


def but_one(incoming):
    lpartials = list(left_partials(incoming))
    rproduct = 1
    result = [None]*len(incoming)
    for i in range(len(incoming)):
        back_index = len(incoming) - i - 1
        if back_index > 0:
            result[back_index] = rproduct * lpartials[back_index-1]
            if back_index < len(incoming):
                rproduct *= incoming[back_index]
        else:
            result[back_index] = rproduct
    return result