On Mon, Oct 4, 2010 at 10:33 PM, Arnaud Delobelle <arno...@gmail.com> wrote: > MRAB <pyt...@mrabarnett.plus.com> writes: >> On 05/10/2010 02:10, Mark Phillips wrote: >>> I have the following string - "['1', '2']" that I need to convert into a >>> list of integers - [1,2]. The string can contain from 1 to many >>> integers. Eg "['1', '7', '4',......,'n']" (values are not sequential) >>> >>> What would be the best way to do this? I don't want to use eval, as the >>> string is coming from an untrusted source. >>> >> I'd probably use a regex, although others might think it's overkill. :-) >> >>>>> import re >>>>> s = "['1', '2']" >>>>> [int(n) for n in re.findall(r'-?\d+', s)] >> [1, 2] >> >> An alternative is: >> >>>>> s = "['1', '2']" >>>>> [int(n.strip("'[] ")) for n in s.split(",")] >> [1, 2] > > I'll add: > >>>> s = ['1', '2', '42'] >>>> [int(x) for x in s.split("'")[1::2]] > [1, 2, 42]
There's also: >>> s = "['1', '2']" >>> from ast import literal_eval >>> [int(n) for n in literal_eval(s)] [1, 2] Which is safe, but less strict. Cheers, Chris -- http://blog.rebertia.com -- http://mail.python.org/mailman/listinfo/python-list