将字符串列表转换为python中的列表

时间:2018-04-11 03:22:28

标签: python string list

我有一个字符串,如下所示,

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

我需要解析它并在/之后取值并将其放入列表中,如下所示

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

我的代码[a[a.index('/')+1:] for a in val[1:-1].split(',')]

输出['54"', '147"', '187"', '252"', '336"']

它还有双引号“这是错误的。 我试过以下后

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

输出

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

有没有更好的方法呢?

4 个答案:

答案 0 :(得分:3)

您可以使用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)

输出:

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

literal_eval()将您的字符串转换为列表,然后i.split('/')[-1]抓取斜杠之后的内容。

答案 1 :(得分:2)

是的...假设每个值都有/,就像你的例子一样,这是优越的:

>>> 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]

*编辑以插入遗忘的括号

答案 2 :(得分:2)

尝试使用正则表达式!

你可以用这种方式一行完成。

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)

<强>结果: ['54', '147', '187', '252', '336']

re.findall生成一个名为regexp所有匹配项的新列表。有关此主题的更多信息,请查看docs on regular expressions

答案 3 :(得分:1)

您可以尝试json模块将字符串转换为列表

>>> import json
>>> val ='["10249/54","10249/147","10249/187","10249/252","10249/336"]'
>>> list(map(lambda x: x.split('/')[-1], json.loads(val)))
>>> ['54', '147', '187', '252', '336']