Не работает код. Ошибка 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 шт):
Вы изменяете существующий список. Таким образом, когда вы удалили некоторые числа из списка, цикл считает что список еще не закончился, т.к. он вычисляет по ИЗНАЧАЛЬНОЙ длине списка, которая не изменяется.
Вам нужно создать отдельный список и помещать туда все числа, которые вам нужны.
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
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()))
Задача ищет сколько цифр подряд крупнее 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)