вполне все разумно. и спокойно проверяется в голове.
l.remove(i) возвращает None. но удаляет элемент из списка. а значение i высчитывается на для каждой итерации из модифицированного списка l. поэтому каждый второй символ будет съеден.
The for statement in Python differs a bit from what you may be used
to in C or Pascal. Rather than always iterating over an arithmetic
progression of numbers (like in Pascal), or giving the user the
ability to define both the iteration step and halting condition (as
C), Python's for statement iterates over the items of any sequence (a
list or a string), in the order that they appear in the sequence. For
example (no pun intended):
>>> # Measure some strings:
... a = ['cat', 'window', 'defenestrate']
>>> for x in a:
... print x, len(x)
...
cat 3
window 6
defenestrate 12
It is not safe to modify the sequence being iterated over in the loop
(this can only happen for mutable sequence types, such as lists). If
you need to modify the list you are iterating over (for example, to
duplicate selected items) you must iterate over a copy. The slice
notation makes this particularly convenient:
>>> for x in a[:]: # make a slice copy of the entire list
... if len(x) > 6: a.insert(0, x)
...
>>> a
['defenestrate', 'cat', 'window', 'defenestrate']
imho, этого достаточно, чтобы более-менее прогнозировать результаты. по крайней мере, на таких простых примерах
вопрос не в этом конкретном примере, а в том, как должно быть определено это выражение, если отвлечься от деталей реализации и попытаться определить его разумным способом.
мне кажется в таком случае должны быть удалены все элементы списка.
по крайней мере этот результат инвариантен относительно перестановки последовательности действий.
>а в том, как должно быть определено это выражение, если отвлечься от деталей реализации и попытаться определить его разумным способом...мне кажется в таком случае должны быть удалены все элементы списка.
А как определить "разумное" для list().insert? А для list()[a:b]=list(x) при разных значениях x? Для dict-ов в каждом из случаев применения? Мысль понятна?
Это (неопределенность) и есть единственное разумное определение, ибо оно одинаково разумно для _любых_ конструкций такого вида.