Michael Haft wrote: > > > Hello, > I have a list of 15 str values called p, when I try the following > code: > > for x in p: > p[x] = float(p[x])/10 > print p
The problem is that iterating a list yields the actual values in the list, not the indices to the list: >>> p = ['1900', '51.50', '11.50'] >>> for x in p: ... print x ... 1900 51.50 11.50 The above are string values though you can't tell from the print. Indexing p by a string gives the error you saw: >>> p['1900'] Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: list indices must be integers One way to do what you want is to change the loop to iterate over indices of p rather than elements of p: >>> for i in range(len(p)): ... p[i] = float(p[i])/10 ... >>> print p [190.0, 5.1500000000000004, 1.1499999999999999] That works but it's not very Pythonic - there are better ways. For example the enumerate funcion yields pairs of (index, value) for each value in a list. It is handy when you need both the index and the value, as you do here: >>> p = ['1900', '51.50', '11.50'] >>> for i, x in enumerate(p): ... p[i] = float(x)/10 ... >>> p [190.0, 5.1500000000000004, 1.1499999999999999] But even better is to use a list comprehension. This is a very useful Python construct that lets you build a new list from an existing list with a very elegant syntax: >>> p = ['1900', '51.50', '11.50'] >>> p = [ float(x)/10 for x in p] >>> p [190.0, 5.1500000000000004, 1.1499999999999999] Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor