首页 > 解决方案 > 如何将字符串格式的嵌套列表转换为列表(递归或迭代方式)

问题描述

我有这个字符串"[1,[2,3],[4,5,6],[7,[8,90],10],[11,120,[13]]]"作为输入。如何使用递归或迭代将此字符串转换为列表,但在 Python 中不导入?

这是我尝试过的。此解决方案仅适用于"[1,[2,3]]"我输入的字符串部分。

预期的输出是[1,[2,3],[4,5,6],[7,[8,90],10],[11,120,[13]]]

l = "[1,[2,3],[4,5,6],[7,[8,90],10],[11,120,[13]]]"

def convert(l,out=[],i=0):
    while i<len(l)-1:
        if l[i] == "]":
            return out,i
        if l[i] =="[":
            out_to_add,index = convert(l[i+1:],[])
            out.append(out_to_add)
            i+=index
        elif l[i]!=",":
            out.append(l[i])
        i+=1
print(convert(l)[0][0])

编辑:注意。这是一项任务,不允许导入

标签: pythonrecursion

解决方案


更短的无导入解决方案:

l = "[1,[2,3],[4,5,6],[7,[8,90],10],[11,120,[13]]]"
def to_list(d):
   while d and (n:=d.pop(0)) != ']':
      if n == '[':
         yield list(to_list(d))
      elif n.isdigit():
         yield int(n+(x:=lambda :'' if not d[0].isdigit() else d.pop(0)+x())())
     
print(next(to_list(list(l))))

输出:

[1, [2, 3], [4, 5, 6], [7, [8, 90], 10], [11, 120, [13]]]

推荐阅读