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

5
我有一个如下的字符串,
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个回答

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']
< p > literal_eval() 将您的字符串转换为列表,然后 i.split('/')[-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
他想要一个字符串列表:[str(i.split('/')[1]) for i in literal_eval(val)]int 替换为 str - DrevanTonder
我猜?我认为他想要整数,但他试图获取字符串,以便可以使用 map(int)。无论如何,我更喜欢这种方式编写答案。由 OP 选择。 - g.d.d.c
2
这有点过度回答了(整数转换并不需要),但是是的,可能是 OP 接下来会问的 :) - Jean-François Fabre

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 生成一个新的列表,其中包含正则表达式的所有匹配项。对于此主题,请查看正则表达式文档以获取更多信息。


2
它在Python 2中的工作方式相同。提示:最好将“print”的结果放入您的答案中,以便其他人可以视觉检查它是否按需要工作。 - Jean-François Fabre

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接