How to convert a string into a list

Matteo Landi landimatte at gmail.com
Tue Oct 5 13:22:54 EDT 2010


What about using the json library? It could handle errors for you:

>>>import json
>>>s = '["1", "2"]'
>>>json.loads(s)
[u'1', u'2']

Now you can convert then to integer values.

Best regards,
Matteo


On Tue, Oct 5, 2010 at 3:41 PM, Mark Phillips
<mark at phillipsmarketing.biz> wrote:
> Thanks to everyone for their suggestions. I learned a lot from them!
>
> Mark
>
> On Mon, Oct 4, 2010 at 11:54 PM, Chris Rebert <clp2 at rebertia.com> wrote:
>>
>> 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
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
>



-- 
Matteo Landi
http://www.matteolandi.net/



More information about the Python-list mailing list