Операции над циклом range

Помогите найти ошибку. Из предложенного списка нужно убрать те числа, которые нарушают последовательность. Но из-за указанного range для сравнения рядом стоящих пар, последнее значение списка не выводится. Есть ли у вас идеи, как можно исправить код?

def ranges(number):
    list = []
    for i in range(len(number)-1):
        
        if number[i]<number[i+1]:
            list.append(number[i])
       
    return (list) 

print(ranges([7, 2, 4, 7, 16, 8, 10, 12]))

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

Автор решения: Павел

У вас проблема не в диапазоне range, последний элемент не попадает в результирующий список из-за того, что для него "нет пары", а ваш цикл перебирает именно все пары соседних элементов. Если отталкиваться от вашего решения, то достаточно сделать дополнительную проверку: не нарушает ли последний элемент общую последовательность.

def ranges(numbers):
    result_numbers = []
    for i in range(1, len(numbers)):
        if numbers[i - 1] < numbers[i]:
            result_numbers.append(numbers[i - 1])
    if numbers[-1] > numbers[-2]:
        result_numbers.append(numbers[-1])
    return result_numbers

print(ranges([7, 2, 4, 7, 16, 8, 10, 12])) # [2, 4, 7, 8, 10, 12]
→ Ссылка
Автор решения: CrazyElf

Не называйте свою переменную list, так вы перекрываете встроенный класс list. А чтобы последнее число списка попало в результат нужно проверять этот случай отдельно. Либо после окончания цикла (но тогда придётся повторять там проверку на "меньше"), либо вставить проверку на то, что это последний элемент внутрь вашей проверки, чтобы кода получилось поменьше (но для больших списков это будет неэффективно):

def ranges(number):
    lst = []
    for i in range(len(number)-1):
        
        if number[i]<number[i+1]:
            lst.append(number[i])
            # Проверка, что это был последний элемент
            # Если да, то его тоже добавляем - условие то выполнено
            if i == len(number)-2:
                lst.append(number[i+1])
       
    return (lst) 

print(ranges([7, 2, 4, 7, 16, 8, 10, 12]))

Вывод:

[2, 4, 7, 8, 10, 12]
→ Ссылка