Не работает код. Ошибка IndexError: list index out of range

Не работает код. Ошибка IndexError: list index out of range

i = 0
s = 0
n, k = input().split()
n, k = int(n), int(k)
a = input().split()
a = [int(item) for item in a]

while s != n: 
    if a[i] < k:
        del a[i-1]  

                     
    i += 1
    s += 1
print(len(a))

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

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

Вы изменяете существующий список. Таким образом, когда вы удалили некоторые числа из списка, цикл считает что список еще не закончился, т.к. он вычисляет по ИЗНАЧАЛЬНОЙ длине списка, которая не изменяется.

Вам нужно создать отдельный список и помещать туда все числа, которые вам нужны.

→ Ссылка
Автор решения: CrazyElf
while s != n: 
    if a[i] < k:
        del a[i-1]  
    i += 1
    s += 1

Что касается общей логики работы вашей программы, не могу ничего сказать, потому что так её и не понял. Но вот конкретно в этом куске у вас точно ошибка, потому что вы периодически уменьшаете список a на 1 элемент, а индекс i у вас всё-равно проходит значения от 1 до n-1, как будто со списком a ничего не происходит. Вероятно, i нужно увеличивать на 1 только в ветке else: которую нужно добавить:

if a[i] < k:
    del a[i-1] 
else: 
    i += 1
→ Ссылка
Автор решения: Zhihar
if a[i] < k:
    del a[i-1]  

вы идете вперед по массиву и удаляете элементы массива уже за собой

массив при этом уменьшается и его размер постепенно уменьшается

естественно, что рано или поздно вы просто выходите за пределы массива

Опишите, что конкретно вы хотели своим кодом сделать то? скорее всего решение будет использовать совершенно другие принципы

P.S.

код

n, k = input().split()
n, k = int(n), int(k)

удобно заменить на такой:

n, k = map(int, input().split())

код

a = input().split()
a = [int(item) for item in a]

удобно заменить на

a = list(map(int, input().split()))
→ Ссылка
Автор решения: Zhihar

Задача ищет сколько цифр подряд крупнее 5 например. – d4riy 1 минуту назад

Ну с этим описанием уже можно работать:

Решение в лоб:

# получить данные
n, k = map(int, input().split())

arr = list(map(int, input().split()))

# найти длину требуемой последовательности
max_len = 0
current_len = 0

for num in arr:
    if num > k:
        current_len += 1
    else:
        if current_len > max_len:
            max_len = current_len
        current_len = 0

# учесть, что максимальная последовательность может не прерываться
if current_len > max_len:
    max_len = current_len

# вывести результат
print(max_len)

Можно чуть уменьшить кол-во проверок:

# найти длину требуемой последовательности
max_len = 0
current_len = 0

for num in arr:
    if num > k:
        current_len += 1
        max_len = current_len if current_len > max_len else max_len
    else:
        current_len = 0

Ну и наверное самый короткий код, но для извращенцев:

# найти длину требуемой последовательности
m, c = 0, 0

for num in arr:
    c, m = (c + 1, c + 1 if c + 1 > m else m) if num > k else (0, m)
→ Ссылка