как можно улучшить код представлен ниже?

Т.к. являюсь новичком, прохожу практику на порталах (не знаю, можно ли писать их названия), где после всегда смотрю, как делают ту же работу, но более качественно. Так получилось, работу сделал, но не сохранилась ссылка на этот урок и теперь не могу его найти и прошу Вас помочь мне, как можно это сделать лучше.

Программа принимает на вход массив с числами, его нужно отсортировать и если числа идут поубыванию/возрастанию на 1 (-3, -2, -1, 0, 1, 2, 3) в диапазоне, больше 3 чисел, то оно заменяет их на "-3 - 3" и возвращает обновленный список. Доп. примеры: [4,5,6,10,15] вернёт: ["4-6",10,15]

def solutions(nums):
    sortNums = sorted(nums)
    newNums = []
    temp = []

    for i, v in enumerate(sortNums):
        if not i == len(sortNums) - 1:
            if sortNums[i] - sortNums[i + 1] == -1:
                temp.append(sortNums[i])
            elif len(temp) >= 2:
                newNums.append(f"{temp[0]} - {sortNums[i]}")
                temp = []
            else:
                newNums.append(sortNums[i])
                newNums += temp
                temp = []
        else:
            newNums += temp
            newNums.append(sortNums[i])
    return newNums

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

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

Я бы так сделал:

data = [3, -1, -4, -5, 11, -2, -121, 7, -123, -3, -120, 6, 8]

arr = sorted(data)

res = []

value = arr[0]
size = 1

for i in range(1, len(arr)):
    if arr[i] == arr[i - 1] + 1:
        size += 1
    else:
        res += [f"{value} - {value + size - 1}"] if size > 2 else list(range(value, value + size))
        value = arr[i]
        size = 1

res += [f"{value} - {value + size - 1}"] if size > 2 else list(range(value, value + size))

print(arr)
print(res)

от последней строчки (учитывающей ситуацию с последними элементом) можно избавиться, если сделать небольшой трюк:

arr = sorted(data) + [None]

res = []

value, size = arr[0], 1

for i in range(1, len(arr)):
    if arr[i] == arr[i - 1] + 1:
        size += 1
    else:
        res += [f"{value} - {value + size - 1}"] if size > 2 else list(range(value, value + size))
        value, size = arr[i], 1
→ Ссылка