On 26 April 2010 21:38, C M Caine <cmca...@googlemail.com> wrote: > Why does this not work: >>>> L = [' foo ','bar '] >>>> for i in L: > i = i.strip()
str.strip() _returns_ a *new* string and leaves the original string alone. The reason being that string are immutable so can not be changed. >>> s1 = ' foo ' >>> s1[1] 'f' >>> s1[1] = 'g' Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> s1[1] = 'g' TypeError: 'str' object does not support item assignment However lists are mutable and can be changed in place. >>> l = [' foo ','bar '] >>> l[0] = ' boo ' >>> l [' boo ', 'bar '] >>> l[1] = 'far ' >>> l [' boo ', 'far '] > But this does: >>>> L = [i.strip() for i in L] >>>> L > ['foo', 'bar'] What you do here is create a *new* list object and assign it to variable L. The new list is created with *new* string objects returned by str.strip(). Putting the 2 together you could do something like below but I would use a list comprehension like you did above: >>> l = [' foo ','bar '] >>> for x in range(len(l)): l[x] = l[x].strip() >>> l ['foo', 'bar'] >>> > What other strange behaviour should I expect from for loops? You should read up on immutable data types like strings and tuples. Start with [1]. Greets Sander [1] http://docs.python.org/reference/datamodel.html _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor