Реализация алгоритма сортировки

Подскажите пожалуйста, как реализовать алгоритм разделения списков. Задается шаг, который будет использоваться для сортировки, затем список должен быть преобразован по первому значению.

К примеру, список [0, 25, 50, 100, 125, 150, 130, 200, 225, 180] Шаг +-25 В итоге получается список списков [[0, 25], [50], [100, 125], [150, 130], [200, 250, 180]] А затем он превращается в [0, 0, 50, 100, 100, 150, 150, 200, 200, 200]


Ответы (2 шт):

Автор решения: GrAnd

Как-то так:

lst = [0, 25, 50, 100, 125, 150, 130, 200, 225, 180]
delta = 25

# группируем
groups = [[lst[0]]]
for i in range(1, len(lst)):
    if groups[-1][0] - delta <= lst[i] <= groups[-1][0] + delta:
        groups[-1].append(lst[i])
    else:
        groups.append([lst[i]])
print(groups)

# плющим
res = []
for el in groups:
    res += [el[0]]*len(el)
print(res)
→ Ссылка
Автор решения: Andy Pavlov

Можно проще сделать, сразу собирая список:

lst = [0, 25, 50, 100, 125, 150, 130, 200, 225, 180]
delta = 25

lst_new = [lst[0], ]
for _ in lst[1:]:
    if abs(_ - lst_new[-1]) <= delta:
        lst_new.append(lst_new[-1])
    else:
        lst_new.append(_)
→ Ссылка