Удаление из списка элементов больше 5

Пытаюсь удалить из списка все элементы больше 5, но почему-то код не работает.

foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
for i in foo:
    if i > 5:
        foo.remove(i)
print(foo)

Как это исправить?


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

Автор решения: MBo

Проще создать отфильтрованный список

bar = [x for x in foo if x <= 5]
→ Ссылка
Автор решения: CrazyElf

Много раз этот вопрос тут обсуждался. Удаление элементов из списка, по которому вы итерируетесь, ломает итерацию, она "проскакивает" элементы, следующие за удаляемыми. Одно из простых решений - итерироваться по копии списка:

for i in foo.copy():
            ^^^^^^^

Но более питонично всё же формировать новый список, фильтруя элементы.

→ Ссылка