为了账号安全,请及时绑定邮箱和手机立即绑定

递归遍历其他节点引用的节点

递归遍历其他节点引用的节点

PIPIONE 2021-11-30 16:14:32
如何参考前一个节点递归迭代节点?在下面的示例中期望输出 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)
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

您的类结构已经成功地将节点的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 个元素,第一个会因“超过最大递归深度”而崩溃)


结果:


4

3

2

1

额外的风格提示:考虑将您的函数命名为list. 通常,您应该避免覆盖内置函数和类型的名称。


查看完整回答
反对 回复 2021-11-30
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

由于缺乏明确的问题陈述,我应该投票结束你的问题,但无论如何......


在 Python 中的对象中,如何传递当前对象的引用


与处理任何对象的方式相同。


对同一类的对象 b


这实际上无关紧要,但无论如何......


这样当我打电话给 b.parent 时,我可以回到对象 a?


class Foo(object):

    def __init__(self, parent=None):

        self.parent = parent


a = Foo()

b = Foo(a)

print(b.parent is a)

现在,对于您没有问的问题的答案,请参阅(并接受)凯文的回答;-)


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 285 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信