递归迭代其他节点引用的节点
Recursively iterating through nodes referenced by other nodes
我如何根据前一个节点递归地遍历节点?在下面的示例中期望输出 4,3,2,1:
class Node:
def __init__(self, parent, value):
self.parent = parent
self.value = value
def append(self, value):
return Node(self, value)
def list(l):
print(l.value)
while l.parent is not None:
list(l.parent)
l = Node(None, 1)
l = l.append(2)
l = l.append(3)
l = l.append(4)
list(l)
您的 class 结构已经成功地将节点的 self
值传递给它的子节点。问题是您的 list
功能。 while l.parent is not None:
永远不会结束,因为循环中没有任何内容会改变 l
的值。递归调用 list
将创建一个新上下文,其中另一个名为 l
的变量与第一个上下文的 l
具有不同的值,但这对第一个 l
或第一个循环。递归函数通常不需要实际循环来迭代数据结构的元素。尝试:
def list(l):
print(l.value)
if l.parent is not None:
list(l.parent)
或:
def list(l):
while l is not None:
print(l.value)
l = l.parent
(我推荐后者,因为如果链中的元素超过 999 个,第一个会因 "maximum recursion depth exceeded" 而崩溃)
结果:
4
3
2
1
额外的风格提示:考虑将您的函数命名为 list
以外的名称。一般来说,您应该避免覆盖内置函数和类型的名称。
由于缺乏明确的问题陈述,我应该投票结束你的问题,但无论如何......
Within an object in Python, how can I pass a reference of my current object
与处理任何对象的方式相同。
to object b of the same class
这实际上是无关紧要的,但无论如何...
such that when I call b.parent, I can get back to object a?
class Foo(object):
def __init__(self, parent=None):
self.parent = parent
a = Foo()
b = Foo(a)
print(b.parent is a)
现在对于您没有提出的问题的答案,请参阅(并接受)Kevin 的回答 ;-)
我如何根据前一个节点递归地遍历节点?在下面的示例中期望输出 4,3,2,1:
class Node:
def __init__(self, parent, value):
self.parent = parent
self.value = value
def append(self, value):
return Node(self, value)
def list(l):
print(l.value)
while l.parent is not None:
list(l.parent)
l = Node(None, 1)
l = l.append(2)
l = l.append(3)
l = l.append(4)
list(l)
您的 class 结构已经成功地将节点的 self
值传递给它的子节点。问题是您的 list
功能。 while l.parent is not None:
永远不会结束,因为循环中没有任何内容会改变 l
的值。递归调用 list
将创建一个新上下文,其中另一个名为 l
的变量与第一个上下文的 l
具有不同的值,但这对第一个 l
或第一个循环。递归函数通常不需要实际循环来迭代数据结构的元素。尝试:
def list(l):
print(l.value)
if l.parent is not None:
list(l.parent)
或:
def list(l):
while l is not None:
print(l.value)
l = l.parent
(我推荐后者,因为如果链中的元素超过 999 个,第一个会因 "maximum recursion depth exceeded" 而崩溃)
结果:
4
3
2
1
额外的风格提示:考虑将您的函数命名为 list
以外的名称。一般来说,您应该避免覆盖内置函数和类型的名称。
由于缺乏明确的问题陈述,我应该投票结束你的问题,但无论如何......
Within an object in Python, how can I pass a reference of my current object
与处理任何对象的方式相同。
to object b of the same class
这实际上是无关紧要的,但无论如何...
such that when I call b.parent, I can get back to object a?
class Foo(object):
def __init__(self, parent=None):
self.parent = parent
a = Foo()
b = Foo(a)
print(b.parent is a)
现在对于您没有提出的问题的答案,请参阅(并接受)Kevin 的回答 ;-)