How to convert a string into a list

Chris Rebert clp2 at rebertia.com
Tue Oct 5 02:54:49 EDT 2010


On Mon, Oct 4, 2010 at 10:33 PM, Arnaud Delobelle <arnodel at gmail.com> wrote:
> MRAB <python at 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



More information about the Python-list mailing list