def generate_pascal_row(row):
    """Generate the successive row in Pascal's triangle.

    While there are many iterative approaches, we can zip together offsets of
    the given row to generate pairs of elements, which we sum to form the final
    data structure.

    For example, if row = [1, 4, 6, 4, 1], then

        [0] + row  # => [0, 1, 4, 6, 4, 1]
        row + [0]  # => [1, 4, 6, 4, 1, 0]

    Adding together corresponding entries with zip and a list comprehension gives

                        [1, 5, 10, 10, 5, 1]

    Just like we wanted!
    """
    if not row: return [1]
    return [left + right for left, right in zip([0] + row, row + [0])]