Skip to content Skip to sidebar Skip to footer

Why Does List.remove() Not Behave As One Might Expect?

from pprint import * sites = [['a','b','c'],['d','e','f'],[1,2,3]] pprint(sites) for site in sites: sites.remove(site) pprint(sites) outputs: [['a', 'b', 'c'], ['d', '

Solution 1:

Normally I would expect the iterator to bail out because of modifying the connected list. With a dictionary, this would happen at least.

Why is the d, e, f stuff not removed? I can only guess: Probably the iterator has an internal counter (or is even only based on the "fallback iteration protocol" with getitem).

I. e., the first item yielded is sites[0], i. e. ['a', 'b', 'c']. This is then removed from the list.

The second one is sites[1] - which is [1, 2, 3] because the indexes have changed. This is removed as well.

And the third would be sites[2] - but as this would be an index error, the iterator stops.

Post a Comment for "Why Does List.remove() Not Behave As One Might Expect?"