Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert string list to list in python

I have a string as below ,

val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'

I need to parse it and take the values after / and put into list as below

['54','147','187','252','336']

My code: [a[a.index('/')+1:] for a in val[1:-1].split(',')]

Output : ['54"', '147"', '187"', '252"', '336"']

It has double quotes also " which is wrong. After i tried as below

c = []
for a in val[1:-1].split(','):
    tmp = a[1:-1]
    c.append(tmp[tmp.index('/')+1:])

Output :

['54', '147', '187', '252', '336']

Is there any better way to do this?

like image 743
PGS Avatar asked Apr 11 '18 03:04

PGS


3 Answers

You can do it in one line using literal_eval:

from ast import literal_eval

val = ['54','147','187','252','336']
a = [i.split('/')[-1] for i in literal_eval(val)]

print(a)

Output:

['54', '147', '187', '252', '336']

literal_eval() converts your string into a list, and then i.split('/')[-1] grabs what's after the slash.

like image 196
Primusa Avatar answered Sep 21 '22 15:09

Primusa


Yeah ... assuming every value has a / like your example, this is superior:

>>> from ast import literal_eval
>>>
>>> val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'
>>> [int(i.split('/')[1]) for i in literal_eval(val)]
[54, 147, 187, 252, 336]

*edited to insert a forgotten bracket

like image 30
g.d.d.c Avatar answered Sep 19 '22 15:09

g.d.d.c


Try using regular expressions!

You can do it in a single line this way.

import re

val = '["10249/54","10249/147","10249/187","10249/252","10249/336"]'

output = re.findall('/(\d+)', val) # returns a list of all strings that match the pattern

print(output)

Result: ['54', '147', '187', '252', '336']

re.findall generates a new list called with all the matches of the regexp. Check out the docs on regular expressions for more info on this topic.

like image 36
Fabián Montero Avatar answered Sep 21 '22 15:09

Fabián Montero