delete items from a set while iterating over it
First, using a set, as Zero Piraeus told us, you can
myset = set([3,4,5,6,2])
while myset:
myset.pop()
print(myset)
I added a print
method giving these outputs
>>>
set([3, 4, 5, 6])
set([4, 5, 6])
set([5, 6])
set([6])
set([])
If you want to stick to your choice for a list, I suggest you deep copy the list using a list comprehension, and loop over the copy, while removing items from original list. In my example, I make length of original list decrease at each loop.
l = list(myset)
l_copy = [x for x in l]
for k in l_copy:
l = l[1:]
print(l)
gives
>>>
[3, 4, 5, 6]
[4, 5, 6]
[5, 6]
[6]
[]
This ought to work:
while myset:
item = myset.pop()
# do something
Or, if you need to remove items conditionally:
def test(item):
return item != "foo" # or whatever
myset = set(filter(test, myset))
Let's return all even numbers while modifying current set.
myset = set(range(1,5))
myset = filter(lambda x:x%2==0, myset)
print myset
Will return
>>> [2, 4]
If there is opportunity use always use lambda
it will make your life easier.