Удалить элемент из списка, если он длиннее 4

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

def friend(x):
    for i in x:
        if len(i) > 4:
            return x.remove(i)

print(friend(["Ryan", "Kieran", "Mark"]))

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

Автор решения: Сергей

У вас классическая ошибка, так как нельзя изменять список в процессе итерирования по нему (это когда for i in x:). Лучше создавать новый, как в примере внизу. Кроме того, вы зря выходите из функции сразу по обнаружении первого длинного элемента, а вдруг там их таких больше? (исправлено тоже)

def friend(x):
    ret = []
    for i in x:
        if len(i) <= 4:
            ret.append(i)
    return ret

print(friend(["Ryan", "Kieran", "Mark"]))
→ Ссылка
Автор решения: TigerTV.ru

Можно так:

a = ["Ryan", "Kieran", "Mark"]
*res, = filter(lambda x: len(x) <= 4, a)
print(res) # ['Ryan', 'Mark']

Но это создает новый список. Если задача именно удалить элемент из имеющегося списка, то можно попробывать так:

def friend(x):
    for i in range(len(x)-1, -1, -1):
        if len(x[i]) > 4:
            x.pop(i)

a = ["Ryan", "Kieran", "Mark"]
friend(a)
print(a) # ['Ryan', 'Mark']
→ Ссылка