我有一个字符串,如下所示,
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']
有没有更好的方法呢?
答案 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']