[ python-Bugs-1584028 ] remove() during iteration causes items to be skipped
SourceForge.net
noreply at sourceforge.net
Wed Oct 25 03:06:12 CEST 2006
Bugs item #1584028, was opened at 2006-10-24 16:44
Message generated for change (Comment added) made by rhettinger
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1584028&group_id=5470
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Interpreter Core
Group: Python 2.4
>Status: Closed
>Resolution: Invalid
Priority: 5
Private: No
Submitted By: Kevin Rabsatt (krabsa)
Assigned to: Nobody/Anonymous (nobody)
Summary: remove() during iteration causes items to be skipped
Initial Comment:
If, when iterating over the contents of a list, the
current item is removed, the next item is skipped.
#Code:
if __name__ == '__main__':
items = [0,1,2,3,4,5]
for i in items:
print i
items.remove(i)
#End Code
Outputs:
0
2
4
I believe the behavior is undesirable. An argument can
be made to not fix, but the issue is worth noting.
----------------------------------------------------------------------
>Comment By: Raymond Hettinger (rhettinger)
Date: 2006-10-24 20:06
Message:
Logged In: YES
user_id=80475
Sorry, this isn't a bug -- it is a natural side-effect of
mutating a object while iterating over it. The various
approaches to dealing with this include:
* don't allow mutation while iterating -- dict.iterkeys()
uses this approach
* iterate over a copy of the object -- dict.keys() uses this
approach
* iterate over consecutive indices and ignore mutation --
lists use this approach
Programmers can avoid dealing with this issue by:
* precopying the list:
for i in items[:]:
print i
remove(i)
* building a new list during iteration:
items[:] = [x for x in items if f(x)]
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1584028&group_id=5470
More information about the Python-bugs-list
mailing list