Python 递归 enumerate(),起始值递增

Python Recursive enumerate(), with Start Value Incrementation

我正在尝试创建一个 Python 函数,该函数通过二叉树的括号表示进行解析并输出它的逐行二分图表示,其中分区由“| 分隔” ",因此:

二叉树括号表示:

(((A, B), C), D)

二分图关系输出:

A B | C D

A B C | D

我使用递归来处理它,将每个二分关系线维护在一个列表中,将原始括号符号字符串和解析的起始索引作为输入。

def makeBipartRecursive(treeStr, index):
    bipartStr  = ""
    bipartList = []
    for ind, char in enumerate(treeStr, start=index):
        if char == '(':
            # Make recursive call to makeBipartRecursive
            indx = ind 
            bipartList.append(makeBipartRecursive(treeStr, indx+1))
        elif char == ')':
            group1 = treeStr[0:index-1] + treeStr[ind+1::]
            group2 = treeStr[index:ind]
            return group1 + " | " + group2
        elif char == ',':
            bipartStr += " " 
        else:
            # Begin construction of string
            bipartStr += char

每次遇到左括号时,都会进行递归调用,从紧跟在左括号后面的索引处开始枚举,以防止无限递归(或者我认为是这样)。如果可能,请尽量忽略我实际上并未返回列表这一事实。 主要问题是我遇到了无限递归,其中枚举永远不会超过我的字符串中的第一个字符。我使用增加的枚举起始位置的递归调用是否应该解决这个问题?

提前致谢。

您误解了 enumeratestart 参数的用法。不是从这个位置开始枚举而是从这个索引开始计数。见 help(enumerate):

|  The enumerate object yields pairs containing a count (from start, which
|  defaults to zero) and a value yielded by the iterable argument.

所以基本上每次执行递归调用时,您都会从字符串的开头重新开始。