Проверка массива на непрерывное возрастание цифр

К примеру у нас есть массив:

nums = [7, 10, 9, 8, 6]
#Отсортировываем, большее к меньшему
nums.sort()

Так вот, как проверить что в этом массиве, есть 5 чисел которые возрастают непрерывно, к примеру в нашем случае это 6,7,8,9,10 - все 5 чисел возрастают непрерывно, возвращает истину, если нет ложь, отмечу что числа могут быть совершенно разные.


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

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

Ну это просто:

all(a - b == 1 for a,b in zip(nums[1:],nums))
→ Ссылка
Автор решения: Danis

можно так:

nums = [7, 10, 9, 8, 6]
nums.sort()

print(nums == list(range(nums[0], nums[-1] + 1)))

думаю что так будет эффективней:

print((nums[-1] - nums[0]) == (len(set(nums)) - 1)) 
→ Ссылка
Автор решения: RomanGrbr
num = [ 7, 10, 9, 8, 6]
num = sorted(num)
b = []

for i in range(len(num)):
    b.append(num[0]+i)

for num, b in zip(num, b):
    print(num, b, sep=' - ')
→ Ссылка
Автор решения: Stanislav Volodarskiy

Задача нужно уточнить перед решением. Массив сортировать не нужно, это можно сделать отдельно до вызова функции five_numbers_in_a_row. Если в массиве несколько растущих последовательностей, то выдадим только первую. Если первая последовательность длиннее пяти элементов, то выдадим только пять первых.

Итого: функция ищет первую подмассив вида i, i + 1, i + 2, i + 3, i + 4 и возвращает i + 4. Теперь можно решать.

Будем двигаться по массиву и считать последовательные растущие числа. k - число таких чисел до сих пор. Если новое число на единицу больше предыдущего, то увеличиваем k, иначе сбрасываем в единицу. Если k достигло пяти, возвращаем ответ.

def five_numbers_in_a_row(a):
    k = 0
    prev_v = None
    for v in a:
        if v - 1 == prev_v:
            k += 1
            if k == 5:
                return v
        else:
            k = 1
        prev_v = v
    return None

Тесты:

10   <- [6, 7, 8, 9, 10]
5    <- [1, 2, 3, 4, 5, 10, 12, 100, 101, 102, 103, 311]
104  <- [1, 12, 13, 14, 15, 20, 22, 100, 101, 102, 103, 104, 105, 311]
None <- [1, 12, 13, 14, 15, 20, 22, 100, 101, 102, 103, 105, 311]
→ Ссылка