Velocity Reviews > "10, 20, 30" to [10, 20, 30]

# "10, 20, 30" to [10, 20, 30]

Daniel Austria
Guest
Posts: n/a

 11-23-2006
Sorry,

how can i convert a string like "10, 20, 30" to a list [10, 20, 30]

what i can do is:

s = "10, 20, 30"
tmp = '[' + s + ']'
l = eval(tmp)

but in my opinion this is not a nice solution

daniel

Tech
Guest
Posts: n/a

 11-23-2006
Daniel Austria a écrit :
> Sorry,
>
> how can i convert a string like "10, 20, 30" to a list [10, 20, 30]
>
> what i can do is:
>
> s = "10, 20, 30"
> tmp = '[' + s + ']'
> l = eval(tmp)
>
> but in my opinion this is not a nice solution
>
>
> daniel
>

If you're sure that there's only ints
l = [int(item) for item in s.split(', ')]

Yannick

John Machin
Guest
Posts: n/a

 11-23-2006

Daniel Austria wrote:
> Sorry,
>
> how can i convert a string like "10, 20, 30" to a list [10, 20, 30]
>
> what i can do is:
>
> s = "10, 20, 30"
> tmp = '[' + s + ']'
> l = eval(tmp)
>
> but in my opinion this is not a nice solution

Most people share your opinion. Try this:

| >>> strg = "10, 20, 30"
| >>> [int(x) for x in strg.split(',')]
| [10, 20, 30]

Cheers,
John

Steven D'Aprano
Guest
Posts: n/a

 11-23-2006
On Thu, 23 Nov 2006 03:13:10 -0800, Daniel Austria wrote:

> Sorry,
>
> how can i convert a string like "10, 20, 30" to a list [10, 20, 30]
>
> what i can do is:
>
> s = "10, 20, 30"
> tmp = '[' + s + ']'
> l = eval(tmp)
>
> but in my opinion this is not a nice solution

It is a dangerous solution if your data is coming from an untrusted source.

>>> s = "10, 20, 30"
>>> L = [x.strip() for x in s.split(',')]
>>> L

['10', '20', '30']
>>> L = [int(x) for x in L]
>>> L

[10, 20, 30]

Or, as a one liner: [int(x.strip()) for x in s.split(',')]

--
Steven.

Tim Williams
Guest
Posts: n/a

 11-23-2006
On 23/11/06, Steven D'Aprano <(E-Mail Removed)> wrote:
> On Thu, 23 Nov 2006 03:13:10 -0800, Daniel Austria wrote:
>
> > Sorry,
> >
> > how can i convert a string like "10, 20, 30" to a list [10, 20, 30]
> >
> > what i can do is:
> >
> > s = "10, 20, 30"
> > tmp = '[' + s + ']'
> > l = eval(tmp)
> >
> > but in my opinion this is not a nice solution

>
>
> It is a dangerous solution if your data is coming from an untrusted source.
>
> >>> s = "10, 20, 30"
> >>> L = [x.strip() for x in s.split(',')]
> >>> L

> ['10', '20', '30']
> >>> L = [int(x) for x in L]
> >>> L

> [10, 20, 30]
>
> Or, as a one liner: [int(x.strip()) for x in s.split(',')]

You don't need the strip()

>>> int(' 10 ')

10
>>>

Fredrik Lundh
Guest
Posts: n/a

 11-23-2006
Tim Williams wrote:

>> It is a dangerous solution if your data is coming from an untrusted source.
>>
>> >>> s = "10, 20, 30"
>> >>> L = [x.strip() for x in s.split(',')]
>> >>> L

>> ['10', '20', '30']
>> >>> L = [int(x) for x in L]
>> >>> L

>> [10, 20, 30]
>>
>> Or, as a one liner: [int(x.strip()) for x in s.split(',')]

>
> You don't need the strip()
>
>>>> int(' 10 ')

> 10
>>>>

and the use of a list comprehension is pretty silly to, given that you want
to apply the same *function* to all items, and don't really need to look
it up for every item:

map(int, s.split(','))

</F>

Tim Williams
Guest
Posts: n/a

 11-23-2006
On 23/11/06, Fredrik Lundh <(E-Mail Removed)> wrote:
> Tim Williams wrote:
> >>>>

>
> and the use of a list comprehension is pretty silly to, given that you want
> to apply the same *function* to all items, and don't really need to look
> it up for every item:
>
> map(int, s.split(','))

Haha, thanks Frederic, I wondered how long it would take for a reply
from you

"Silly" though ??

Tim