问题描述
s = 'a,s,[c,f],[f,t]'
我想将其转换为列表
S = ['a','s',['c','f'],['f','t']]
我尝试使用strip()
d = s.strip('][').split(',')
但是它没有给我想要的输出:
output = ['a','[c','f]','[f','t']
解决方法
您可以使用ast.literal_eval()
,首先将每个元素都用引号引起来:
>>> qs = re.sub(r'(\w+)',r'"\1"',s) # add quotes
>>> ast.literal_eval('[' + qs + ']') # enclose in brackets & safely eval
['a','s',['c','f'],['f','t']]
如果您的元素可以包含非单词字符,则可能需要调整正则表达式。
这仅在您的输入字符串遵循Python表达式语法或足够接近以机械方式转换为Python语法时才有效(如上面通过添加引号和括号所做的那样)。如果此假设不成立,则可能需要使用parsing library。 (您还可以手动编写递归下降解析器,但是正确完成工作可能不只是使用解析库。)
,除了ast.literal_eval
以外,您可以使用json
程序包,其使用的NPE答案的限制大致相同:
import re
import json
qs = re.sub(r'(\w+)',s) # add quotes
ls = json.loads('[' + qs + ']')
print(ls)
# ['a','t']]