from datetime import timedelta
import itertools

def fins_on_1(llista_rep, temps_disp):
    t = timedelta()
    trobat = False
    for c, g, d in llista_rep:
        t = t + d
        trobat = t > temps_disp
        if trobat:
            break
        yield c, g, t

def fins_on_2(llista_rep, temps_disp):
    i1 = itertools.accumulate(llista_rep, lambda a, c: (c[0], c[1], a[2] + c[2]))
    i2 = itertools.takewhile(lambda c: c[2] <= temps_disp, i1)
    return i2

# Tria la solució que vulguis provar
# fins_on = fins_on_1
fins_on = fins_on_2
