reduce(function, sequence[, initializer])
Applies function (which should be a function or other callable object taking two arguments) cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value.
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
((((1+2)+3)+4)+5). The left argument, x, is the
accumulated value and the right argument, y, is the updated value
from the sequence.
If the optional initializer is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty. If initializer is not given and the sequence contains only one item, the first item is returned.