Python

Поч не видит число?!?!

дан список: -3 -2 3 4 -9 -3 -4 3 -6
и дан интервал: 1 8 (всё что между ними удаляется)
сама прога:
lst=list(map(int, input().split()))
a,b=map(int, input().split())
for i in lst:
if a<=i<=b:
lst.remove(i)
print(*lst)

НЕ ВИДИТ ЧИСЛО 4!!!
Проблема здесь в том, что при удалении элементов из списка lst внутри цикла for i in lst: итерация по списку может пропустить некоторые элементы, так как список изменяется во время выполнения цикла.

В данном случае, когда происходит удаление элемента 3, следующим элементом в списке будет -9, но цикл переходит к следующей итерации и уже не видит элемент 4, который находится на этой позиции.

Чтобы избежать этой проблемы, можно воспользоваться генератором нового списка, в котором будут только те элементы, которые не попадают в интервал [a, b]. Например:

lst = list(map(int, input().split()))
a, b = map(int, input().split())

new_lst = [i for i in lst if not (a <= i <= b)]

print(*new_lst)

Эта программа создает новый список new_lst, содержащий только те элементы i из исходного списка lst, для которых условие not (a <= i <= b) истинно. Таким образом, элементы в интервале [a, b] не попадут в новый список.
Алексей Нечушкин
Алексей Нечушкин
1 635
Лучший ответ
Не занимайся ерундой, когда есть человеческий способ это реализовать:
 lst = (int(s) for s in input().split())
a, b = (int(s) for s in input().split())
print(*(n for n in lst if not (a
Потому что не надо удалять элементы объекта, по которому ты итерируешься.
Вот например у тебя список [1, 2, 3]
Удаляешь единицу - у тебя всё сдвигается [2, 3] и следующим элементом становится не 2, а 3
Проблема возникает из-за того, что в цикле используется метод `remove()`, который изменяет список, по которому происходит итерация. В результате пропускается число 4, которое находится в списке после удаления -2.

Чтобы избежать этой ошибки, можно использовать генератор списков с условием:
 lst = [i for i in lst if not (a
Jon Satybaldiev
Jon Satybaldiev
552