Операции над циклом 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]
Не называйте свою переменную 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]