递归迭代其他节点引用的节点

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 的回答 ;-)