properly delete item during "for item in..."

Reedick, Andrew jr9445 at ATT.COM
Thu Jul 17 15:56:27 EDT 2008



> -----Original Message-----
> From: python-list-bounces+jr9445=att.com at python.org [mailto:python-
> list-bounces+jr9445=att.com at python.org] On Behalf Of Ratko
> Sent: Thursday, July 17, 2008 12:27 PM
> To: python-list at python.org
> Subject: properly delete item during "for item in..."
> 
> Say you have something like this:
> 
> for item in myList:
>    del item
> 
> Would this actually delete the item from the list or just decrement
> the reference counter because the item in myList is not associated
> with name "item" anymore (but still is with myList[itemIndex])? In
> other words, is "item" a temporary reference to myList[itemIndex] or
> is it actually that reference that myList has stored?
> 
> I am not sure if this question even makes any sense anymore. I've been
> using python for years and never had any problems (and I don't now
> either) but now that I had to revisit c++/STL, I had to deal about
> these issues and was wondering how python does it.
> 


Walk the list backwards when deleting.



master = ['a', 'b', 'c', 'd', 'e', 'f', 'g']


print "Deletes nothing"
a = master[:]
print a
for i in a:
	del i
print a

print
print

print "Deletes safely from end"
a = master[:]
print a
for i in range(len(a)-1, -1, -1):
	print i
	if i % 2 == 0:
		print "    removing ", master[i]
		del a[i]
		print "    ", a,
		if master[i] in a:
			print "Ooops, deleted wrong thing...",
		print
print a

print
print

print "Delete from front.  Deletes wrong things and throws an
exception..."
a = master[:]
print a
#for i in range(len(a)-1, -1, -1):
for i in range(len(a)):
	print i
	if i % 2 == 0:
		print "    removing ", master[i]
		del a[i]
		print "    ", a,
		if master[i] in a:
			print "Ooops, deleted wrong thing...",
		print
print a





More information about the Python-list mailing list