Проверить список на непрерывное возрастание чисел и получить
Создавал предыдущий вопрос но не совсем уточнил точные действия. И так у нас есть список из чисел:
num = [1,2,3,4,5,100,214,411,41]
OUT: True, MAX: 5
Нам требуется проверить, если в этом списке есть 5 чисел которые нарастают непрерывно, то есть - 1, 2, 3, 4, 5, а так же вывести то число до какого идет непрерывное возрастание, в нашем случае 5 Так же списки могут быть разными, к примеру у нас будет такой список:
num = [22,1,2,3,4,5,6,7,8,41,44,200]
OUT: True, MAX: 8
Тут мы видим что нарастание идет уже из 8 цифр, нам требовалось проверить наростают ли 5 цифр, в этом случае мы должны получить что непрерывно наростают у нас 3,4,5,6,7 (то есть получаем максимальное число)
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
def f(arr):
for i in range(len(arr) - 5):
el = arr[i:i + 5]
if el == list(range(min(el), max(el) + 1)):
return True, el[-1]
return False
print(f([22,1,2,3,4,5,6,7,8,41,44,200]))
Вывод:
(True, 5)
def f(arr):
arr2 = []
for i in range(len(arr) - 5):
el = arr[i:i + 5]
if el == list(range(min(el), max(el) + 1)):
arr2.append(el[-1])
if arr2:
return True, max(arr2)
return False
print(f([22,1,2,3,4,5,6,7,8,41,44,200]))
Вывод:
(True, 8)
Вариант где длина передаётся как параметр
def f(arr, n):
for i in range(len(arr) - n):
el = arr[i:i + n]
if el == list(range(min(el), max(el) + 1)):
return True, el[-1]
return False
Автор решения: Zhihar
→ Ссылка
как вариант:
old = arr[0]
len_max = 0
len_cur = 0
for value in arr + [arr[-1] + 2]:
if value != old + 1:
len_max = len_cur if len_cur > len_max else len_max
len_cur = 0
old = value
len_cur += 1
print(len_max >= 5, len_max)