Removing items from a list
MRAB
python at mrabarnett.plus.com
Fri Feb 10 15:26:26 EST 2012
On 10/02/2012 20:04, Thomas Philips wrote:
> In the past, when deleting items from a list, I looped through the
> list in reverse to avoid accidentally deleting items I wanted to keep.
> I tried something different today, and, to my surprise, was able to
> delete items correctly, regardless of the direction in which I looped,
> in both Python 3.2.2. and 2..1 - does the remove() function somehow
> allow the iteration to continue correctly even when items are removed
> from the midde of the list?
>
>>>> x = list(range(10))
>>>> x
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>> for i in x:
> if i % 2 == 0:
> x.remove(i)
>
>>>> x
> [1, 3, 5, 7, 9]
>>>> for i in reversed(x):
> if i % 2 == 0:
> x.remove(i)
>
>>>> x
> [1, 3, 5, 7, 9]
>>>> x = list(range(10))
>>>> for i in reversed(x):
> if i % 2 == 0:
> x.remove(i)
>
>
>>>> x
> [1, 3, 5, 7, 9]
>
The answer is no. For example:
>>> for i in x:
print("i is", i)
if i % 2 == 0:
x.remove(i)
i is 0
i is 1
i is 2
i is 4
>>> x
[0, 1, 3, 5]
More information about the Python-list
mailing list