Удалить из списка все элементы до указанного (нюанс)

Есть два ньюанса: (1) если в списке нет элемента до которого нужно удалить остальные элементы, то список не должен измениться. (2) если list пустой, то он должен остаться пустым.

def remove_all_before(items: list, border: int) -> Iterable:
    if border in items:
        for i in range(len(items)):
            if items != border:
                items.remove(items[i])
            a = i
            items.remove(items[a])    
            return items
        else:
            return items
    else:
        return items        


print((remove_all_before([1, 2, 3, 4, 5], 3))) #[3, 4, 5]
print((remove_all_before([1, 1, 2, 2, 3, 3], 2))) #[2, 2, 3, 3]
print((remove_all_before([1, 1, 2, 4, 2, 3, 4], 2))) #[2, 4, 2, 3, 4]
print((remove_all_before([1, 1, 5, 6, 7], 2))) #[1, 1, 5, 6, 7]
print((remove_all_before([], 0))) #[]
print((remove_all_before([7, 7, 7, 7, 7, 7, 7, 7, 7], 7))) #[7, 7, 7, 7, 7, 7, 7, 7, 7]

Не могу понять как пройти последнюю проверку с семерками, городить бутерброд уже не получается и помогите этот код представить в лямбда выражении (в комментариях справа от print каким должен быть итоговый результат получен)


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

Автор решения: Эникейщик

Правило номер 1: никогда нельзя изменять исходный список, нужно создавать новый.

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

def remove_all_before(items: list, border: int):
    if border in items:
        for i in range(len(items)):
            if items[i] == border: # <- нашли border
                return items[i:] # <- вернули всё, что после
        else: # в этом else нет смысла, потому что если список содержит border,
              # то рано или поздно if выполнится
              # и до этого else выполнение никогда не дойдет
            return items
    else:
        return items 
→ Ссылка
Автор решения: eri
def remove_all_before(items: list, border: int):
    try:
        return items[items.index(border):]
    except ValueError: # нет значения
        return items
→ Ссылка