from functools import reduce
    
def merge_func(last, current):
    merged = [last[0], current[1]]
    return merged

def is_mergeable(first, second):
    return first[1] == second[0]

def merge_by_dist(source, merge_function, can_be_merged):
    def reducer(acc, item):
        if len(acc) == 0:
            return [item]
        last = acc[-1]
        if is_mergeable(last, item):
            merged = merge_func(last, item)
            acc = acc[:-1]
            return acc + [merged]
        return acc + [item]
    return reduce(reducer, source, [])
    
merge_by_dist([[1,2], [2,3], [3,4], [5,6]], merge_func, is_mergeable)

Изменить пасту