Почему не удаляет второй элемент 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 шт):
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)))
Я рекомендую не изобретать велосипед, а использовать возможности стандартной библиотеки:
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]