Я хочу разобрать строку с вложенными скобками во вложенный список.
Пример - parse_nested("abc(def(gh)ij)klm") -> ["abc", ["def", ["gh"], "ij"], "klm"]
.
Мой код работает, но мне было интересно, есть ли лучший способ сделать это.
Вот мой код (позже я напишу проверки, чтобы поймать искаженный ввод):
def match(s, start, stop):
start = c = s.index(start)
level = 0
while c < len(s):
if s[c] == start:
level += 1
elif s[c] == stop:
level -= 1
if level == 0:
return (start+1, c)
c += 1
return None
def parse_nested(s):
if start not in s and stop not in s:
return s
else:
g = match(s, start, stop)
first = s[:g[0]-1]
middle = parse_nested(s[g[0]:g[1]])
last = parse_nested(s[g[1]+1:])
result = [first] if first else []
if type(middle) == str:
result.append([middle])
else:
result.append(middle)
if last:
if type(last) == str:
result.append(last)
else:
result += last
return result
Если не считать использования библиотеки синтаксического анализа, есть ли более короткий/лучший способ сделать это?
eval
. - person rlms   schedule 01.02.201431.2. ast — Abstract Syntax Trees¶
. Почему нельзя с другим? Просто замените(
на>
в коде. (Я использовал eval, потому что Codepad неimport ast
) - person Grijesh Chauhan   schedule 01.02.2014def parse(string, delimiter):
code ..s = s.replace("," + delimiter, string)
...1 - person Grijesh Chauhan   schedule 01.02.2014