This answer explains why you do not want to use reduce
for this in Python.
Consider the snippet
reduce(operator.add, [[1], [2], [3], [4], [5]])
What does this have to do?
[1] + [2] => [1, 2]
[1, 2] + [3] => This makes a new list, having to go over 1, then 2, then 3. [1, 2, 3]
[1, 2, 3] + [4] => This has to copy the 1, 2, and 3 and then put 4 in the new list
[1, 2, 3, 4] + [5] => The length of stuff I have to copy gets bigger each time!
This quadratic behavior is completely avoidable: the original solution (and any number of other solutions) does not form these intermediate copying steps.