Проверка массива на непрерывное возрастание цифр
К примеру у нас есть массив:
nums = [7, 10, 9, 8, 6]
#Отсортировываем, большее к меньшему
nums.sort()
Так вот, как проверить что в этом массиве, есть 5 чисел которые возрастают непрерывно, к примеру в нашем случае это 6,7,8,9,10 - все 5 чисел возрастают непрерывно, возвращает истину, если нет ложь, отмечу что числа могут быть совершенно разные.
Ответы (4 шт):
можно так:
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))
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=' - ')
Задача нужно уточнить перед решением. Массив сортировать не нужно, это можно сделать отдельно до вызова функции 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]