A one-liner would be:
result = [s[:l] for s, l in zip(seq, lengths)]

Depending on the shapes you are using, my approach might be faster.
For the current workload I see:
# your approach
41.5 µs ± 2.36 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
# mine
26.4 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)