It is no secret that reduce is not among the favored functions of the Pythonistas.
Generically, reduce is a left fold on a list
It is conceptually easy to write a fold in Python that will fold left or right on a iterable:
def fold(func, iterable, initial=None, reverse=False):
x=initial
if reverse:
iterable=reversed(iterable)
for e in iterable:
x=func(x,e) if x is not None else e
return x
Without some atrocious hack, this cannot be replicated in a comprehension because there is not accumulator type function in a comprehension.
Just use reduce — or write one that makes more sense to you.