Проверить список на непрерывное возрастание чисел

Рейтинг: 0Ответов: 3Опубликовано: 19.03.2023

Нужно проверить, является ли переданная последовательность целых чисел возрастающей непрерывно (не имеющей пропусков чисел). Например, последовательность [4, 5, 6, 7] — непрерывная, а [0, 1, 3] — нет. Что у меня получилось:

number = []
number1 = [7]
number2 = [5, 3, 2, 8]
number3 = [10, 11, 12, 14, 15]
number4 = [1, 2, 3, 4, 5, 6, 7, 8]


def is_continuous_sequence(number):
    for n in range(len(number) - 1):
        if number[n] < number[n + 1]:
            return True
        else:
            return False


print(is_continuous_sequence(number))
print(is_continuous_sequence(number1))
print(is_continuous_sequence(number2))
print(is_continuous_sequence(number3))
print(is_continuous_sequence(number4))

В итоге у меня получается следующее, что первые два вывода это None - является неверным ответом, а дальше False и True, что является верным ответом. Как сделать так, чтобы первые два вывода тоже были False?

Ответы

▲ 1Принят

В одну строку. Истина возвращается только если длина списка больше 1 И список равен сгенерированному списку от M до N с шагом 1, где M - первое число в списке, а N - последнее. В остальных случаях возвращается ложь.

def is_continuous_sequence2(number):
    return len(number) > 1 and number == list(range(number[0], number[-1] + 1))


for number in [], [7], [5, 3, 2, 8], [10, 11, 12, 14, 15], [1, 2, 3, 4, 5, 6, 7, 8]:
    print(is_continuous_sequence2(number))
False
False
False
False
True
▲ 0

У вас если длина списка <= 1 цикл for не проходит ни разу и из-за этого функция возвращает None.

Чтобы в этих случаях функция возвращала False, её нужно изменить так:

def is_continuous_sequence(number):
    if len(number) <= 1:  # Если длина маленькая ...
        return False  # ... возвращаем False
    for n in range(len(number) - 1):
        if number[n] < number[n + 1]:
            return True
        else:
            return False
▲ 0
a = [len(n) > 1 and all(i==e for e, i in enumerate(n, start=n[0])) for n in [number, number1, number2, number3, number4]]