Это связано с тем, что индексы смещаются на единицу при каждом удалении, а список становится короче. Более подход Pythoni c состоит в том, чтобы собрать все, что еще действует, в новый список. Это можно сделать с помощью простого понимания списка следующим образом:
L2 = [i for i in L if i != 2]
>>> L2
[1, 3, 4, 8]
В качестве альтернативы вы можете использовать filter
:
L3 = list(filter(lambda x: x != 2, L))
>>> L3
[1, 3, 4, 8]