所以我希望解析一个字符串并将其展平,其中包含可变深度的数字。
以下是字符串的示例:
'(7&(10&(22|25))|(22&25)|(25&(10|22)))|(9&(10&(22|25))|(22&25)|(25&(10|22)))|(33&22&25)'
这意味着,我们在第一级有3种不同的可能性,如此列表所示:
['7&(10&(22|25))|(22&25)|(25&(10|22))', '9&(10&(22|25))|(22&25)|(25&(10|22))', '33&22&25']
此列表中的最后一个选项只能是一个(因为它没有内部级别)。
然而,第一个是变化很大的:所以我将重点关注: ' 7&'表示该级别中的每个元素都有一个7。
然后我们从中提取子级别,我们得到:
['10&(22|25)', '22&25', '25&(10|22)']
所以在这里,索引1是一个死胡同,所以我们对该树的最终输出是' 7& 22& 25'。对于指数0,我们的父母为7& 10&和一个22 | 25的孩子,这意味着分开的树木,所以我们的决赛是7& 10& 22和7& 10& 25,最后,我们有7& 25& 10和7& 25& 22。
我有什么方法可以迭代地做到这一点?我已经有解析器来提取单个级别并提取是否有数字字符加上&符号并提取子级别。
非常感谢你。
答案 0 :(得分:1)
我认为你想要的不是迭代,而是recursion。
假设你有一个解析器功能"解析"可以采用字符串并返回子字符串列表,它可能看起来像这样:
def parse_recursively(string):
if (string is dead end): # base case
return [string]
else:
children = parse(string) # returns a list of children strings
rv = list()
for s in children:
rv.extend(parse_recursively(s))
return rv