Реализация алгоритма сортировки
Подскажите пожалуйста, как реализовать алгоритм разделения списков. Задается шаг, который будет использоваться для сортировки, затем список должен быть преобразован по первому значению.
К примеру, список [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(_)