由于我无法解释,我无法想象我会从中得到很多帮助。但是例如我有一个像这样的字符串:
s = "[1,[2,2,[3,4]],5]"
我需要将其转换为嵌套列表项
lst = ["1",["2","2",["3","4"]],"5"]
如果我要lst[1][2][0]
,它会返回'3'
。
我尝试这样做的方法是为' [']中的每个数字创建一个子字符串。并且字符串字符结束然后慢慢地将其嵌回
def ParseList(strlist):
if '[' in strlist:
print strlist
return ParseList(GetBetweenChar(strlist,'[',None))
else:
return strlist
然而它返回:(虽然这可能是一个好的开始?我不知道在哪里继续)
[1,[2,2,[3,4]],5]
1,[2,2,[3,4]],5
2,2,[3,4]],
3,4]]
我认为我会将其附加到列表项但我不知道如何...
答案 0 :(得分:2)
您可以使用ast.literal_eval
将字符串安全地转换为嵌套的整数列表。然后定义一个嵌套的map函数,将所有元素转换为字符串,同时保持嵌套结构。
from ast import literal_eval
s = "[1,[2,2,[3,4]],5]"
ls = literal_eval(s)
# yes I know there is something else called nmap
def nmap(fn, iterable):
res = []
for i in iterable:
if isinstance(i, list): # could be tuple or something else?
res.append(nmap(fn, i))
else:
res.append(fn(i))
return res
result = nmap(str, ls)
print(result)
print(result[1][2][0])
结果:
[' 1',[' 2',' 2',[' 3',' 4' ]],' 5']
3
答案 1 :(得分:0)
您可以使用eval()。请注意确保字符串是安全的,因为eval会将字符串转换为有效的python代码。
>>> eval("[1,[2,2,[3,4]],5]")[1][2][0]
3
答案 2 :(得分:0)
如果你不是要求每个部分都是一个字符串,但你可以让数字成为数字,那么你可以使用json库:
>>> s = "[1,[2,2,[3,4]],5]"
>>> import json
>>> json.loads(s)
[1, [2, 2, [3, 4]], 5]
请注意,如果您的原始列表包含数字或布尔值,则它们将保留为数字或布尔值。这可能是你想要的,但如果你真的需要一切都是字符串,那么你可以通过嵌套数组递归并将str
应用于所有内容(寻找"如何在Python中使用flatmap" )或在下面的评论部分请求进一步的帮助。
答案 3 :(得分:0)
您可以先围绕数字添加引号,然后评估列表:
s = "[1,[2,2,[3,4]],5]"
res = ''
for c in s:
if c.isdigit():
res += '"' + c + '"'
else:
res += c
s = eval(res)
s
['1', ['2', '2', ['3', '4']], '5']
这适用于单位数字;多个数字或浮点数需要更多的工作
答案 4 :(得分:0)
Eval
对用户输入不安全。
您可以执行类似于python(2.6+)的操作:
>>> import ast
>>> s = "[1,[2,2,[3,4]],5]"
>>> lst = ast.literal_eval(s)
>>> str(lst[1][2][0])
'3'