On Tue, Aug 04, 2015 at 05:52:15PM -0700, Clayton Kirkwood wrote: > As seen below (closely), some filenames are not being removed while others > are, such as in the first stanza, some pdfs are removed, some aren't. In the > second stanza, Thumbs.db makes it through, but was caught in the first > stanza. (Thanks for those who have proffered solutions to date!) > I see no logic in the results. What am I missing???
You are modifying the list of files while iterating over it, which plays all sorts of hell with the process. Watch this: py> alist = [1, 2, 3, 4, 5, 6, 7, 8] py> for n in alist: ... if n%2 == 0: # even number ... alist.remove(n) ... print(n) ... 1 2 4 6 8 py> print(alist) [1, 3, 5, 7] If you pretend to be the Python interpreter, and simulate the process yourself, you'll see the same thing. Imagine that there is a pointer to the current item in the list. First time through the loop, it points to the first item, and you print the value and move on: [>1, 2, 3, 4, 5, 6, 7, 8] print 1 The second time through the loop: [1, >2, 3, 4, 5, 6, 7, 8] remove the 2, leaves the pointer pointing at three: [1, >3, 4, 5, 6, 7, 8] print 2 Third time through the loop, we move on to the next value: [1, 3, >4, 5, 6, 7, 8] remove the 4, leaves the pointer pointing at five: [1, 3, >5, 6, 7, 8] print 4 and so on. The lesson here is that you should never modify a list while iterating over it. Instead, make a copy, and modify the copy. -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor