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
每次遇到左括号时,都会进行递归调用,从紧跟在左括号后面的索引处开始枚举,以防止无限递归(或者我认为是这样)。如果可能,请尽量忽略我实际上并未返回列表这一事实。 主要问题是我遇到了无限递归,其中枚举永远不会超过我的字符串中的第一个字符。我使用增加的枚举起始位置的递归调用是否应该解决这个问题?
提前致谢。
您误解了 enumerate
的 start
参数的用法。不是从这个位置开始枚举而是从这个索引开始计数。见 help(enumerate)
:
| The enumerate object yields pairs containing a count (from start, which
| defaults to zero) and a value yielded by the iterable argument.
所以基本上每次执行递归调用时,您都会从字符串的开头重新开始。
我正在尝试创建一个 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
每次遇到左括号时,都会进行递归调用,从紧跟在左括号后面的索引处开始枚举,以防止无限递归(或者我认为是这样)。如果可能,请尽量忽略我实际上并未返回列表这一事实。 主要问题是我遇到了无限递归,其中枚举永远不会超过我的字符串中的第一个字符。我使用增加的枚举起始位置的递归调用是否应该解决这个问题?
提前致谢。
您误解了 enumerate
的 start
参数的用法。不是从这个位置开始枚举而是从这个索引开始计数。见 help(enumerate)
:
| The enumerate object yields pairs containing a count (from start, which
| defaults to zero) and a value yielded by the iterable argument.
所以基本上每次执行递归调用时,您都会从字符串的开头重新开始。