我希望能够打开字符串,例如:'(* (+ int (+ int real)) int)'
放入嵌套的列表,其中括号是列表的开始/结尾,看起来像这样(在这种情况下)
['*', ['+', 'int', ['+', 'int', 'real']], 'int']
我尝试了以下代码,但没有用
def bracketCheck(el):
if el == ')' or el == '(':
return False
else:
return True
def stringIntoList(lst):
lst1 = ''
lst2 = []
for i in range(0, len(lst)-1):
if bracketCheck(lst[i]):
lst1 += lst[i]
elif lst[i] == '(':
b = stringIntoList(lst[i:])
elif lst[i] == ')':
lst2.append(lst1)
lst2.append(b)
lst1 = ''
return lst2
答案 0 :(得分:0)
您可以使函数跟踪递归调用消耗的子字符串的长度:
def stringIntoList(string):
output = []
token = ''
index = 0
while index < len(string):
char = string[index]
index += 1
if char in '() ' and token:
output.append(token)
token = ''
if char == '(':
lst, offset = stringIntoList(string[index:])
output.append(lst)
index += offset
elif char == ')':
break
elif char != ' ':
token += char
return output, index
这样:
stringIntoList('(* (+ int (+ int real)) int)')[0][0]
返回:
['*', ['+', 'int', ['+', 'int', 'real']], 'int']
请注意,第一个[0]
用于获取列表,因为第二项是偏移量,而第二个[0]
用于获取列表的第一个子列表,因为您显然假定输入总是以括号开头和结尾。