gpt4 book ai didi

python - 如何将字符串转换为嵌套列表,元素以逗号分隔

转载 作者:行者123 更新时间:2023-11-28 20:00:23 24 4
gpt4 key购买 nike

我有一个看起来像这样的字符串:

'(a (b (c d e f)) g)'

我想把它变成这样一个嵌套列表:

['a', ['b', ['c', 'd', 'e', 'f']], 'g']

我使用了这个函数:

def tree_to_list(text, left=r'[(]', right=r'[)]', sep=r','):
pat = r'({}|{}|{})'.format(left, right, sep)
tokens = re.split(pat, text)
stack = [[]]
for x in tokens:
if not x or re.match(sep, x): continue
if re.match(left, x):
stack[-1].append([])
stack.append(stack[-1][-1])
elif re.match(right, x):
stack.pop()
if not stack:
raise ValueError('error: opening bracket is missing')
else:
stack[-1].append(x)
if len(stack) > 1:
print(stack)
raise ValueError('error: closing bracket is missing')
return stack.pop()

但结果不是我所期望的。字符串之间没有逗号:

['a', ['b', ['c' 'd' 'e' 'f']], 'g']

你能帮我一下吗

最佳答案

您可以将递归与生成器一起使用:

import re
data = '(a (b (c d e f)) g)'
def group(d):
a = next(d, ')')
if a != ')':
yield list(group(d)) if a == '(' else a
yield from group(d)
print(next(group(iter(re.findall(r'\w+|[()]', data)))))

输出:

['a', ['b', ['c', 'd', 'e', 'f']], 'g']

关于python - 如何将字符串转换为嵌套列表,元素以逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58511712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com