Sandip Bhattacharya wrote:
AFAIK, the for condition in this case *is* evaluated at the beginning of every iteration, but this is misleading. For example:for x in string: if x in chars: string[i] = ''
I just have a hangover from other languages, but I really wanted to know how Python handles iteration over a variable which is being changed within the loop itself. Is the "for" condition evaluated in every loop?
- Sandip
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
>>> string=list('banana') >>> for x in string: string.remove(x) print string
Does not print
['a', 'n', 'a', 'n', 'a'] ['n', 'a', 'n', 'a'] ['a', 'n', 'a'] ['n', 'a'] ['a'] []
But rather:
['a', 'n', 'a', 'n', 'a'] ['a', 'a', 'n', 'a'] ['a', 'a', 'a']
Let's figure this out. First, string is ['b','a','n','a','n','a']. So x == 'b'. 'b' is removed, and string printed: ['a', 'n', 'a', 'n', 'a']. Then, the for loop grabs the second character in string (which has changed) because it has already used the first one. So x == 'n'. 'n' is removed and string printed, etc. In general, it is A Good Idea to not change the length of sequences as you loop over them. If you use a for i in range(len(string)): style, you will get an IndexError because in this case Python does *not* check len(string) every iteration. If you use a different style, you will just get weird results.
HTH, Orri
-- Email: singingxduck AT gmail DOT com AIM: singingxduck Programming Python for the fun of it.
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor