Почему не удаляет второй элемент Python

Всем привет. Есть задачка. в функцию передается два значения, список и число. Нужно удалять все элементы списка пока до тех пор, пока число списка не будет ровно числу переданным вторым параметром в функцию

def remove_all_before(items: list, border: int) :
    # your code here
    index = 0
    for i in items:
        if i == border:
            break
        else:
            print(f"Удаляем {i}")
            input(" ")
            del items[index]
            index = index + 1

    return items


print(list(remove_all_before([1, 2, 3, 4, 5], 3)))

Написал вот такую функцию, но он почему то не удаляет второй элемент и возвращает результат

[2, 3, 4, 5]

а должен

[3, 4, 5]

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

Автор решения: Vova Shkurletov
def remove_all_before(items: list, border: int) :
# your code here
index = 0
for i in items:
    if i == border:
        continue
    else:
        print(f"Удаляем {i}")
        del items[index]
        index = index + 1

return items

print(list(remove_all_before([1, 2, 3, 4, 5], 3)))

→ Ссылка
Автор решения: Xander

Я рекомендую не изобретать велосипед, а использовать возможности стандартной библиотеки:

from itertools import dropwhile


data = [1, 2, 3, 4, 5]
element = 3

result = list(dropwhile(lambda x: x != element, data))

print(result)

Что касается того, почему не работает ваш код - внутри цикла никогда не стоит удалять элементы последовательности, по которой проходит этот цикл. При удалении все последующие элементы смещаются и цикл проскакивает через один элемент. Кроме того, у вас из-за такого смещения index будет указывать уже не на тот элемент, который вы ожидаете.

→ Ссылка
Автор решения: андрей горничар

вот код без использования сторонних модулей и с проверкой на выход за пределы списка len(items) - borderето индекс с которого будет срезан список и возвращен как результат роботы функции
if len(items) <= border: ето проверка на выход за пределы списка если border меньше либо равно длине списка , в таком случае функция вернёт пустой список проверка нужна чтобы не возвращался список срезанный по негативному индексу или вернулся пустой список если длина списка ровна border

def remove_all_before(items: list, border: int) :
    if len(items) <= border :
        return []
    else:
        return items[len(items)-border::]
    
print(remove_all_before([1,2,3,4,5],3))

[3, 4, 5] 
→ Ссылка