通过调用列表中的最后一个对象直到返回None的Python方式构建列表

时间:2019-01-21 07:45:40

标签: python

我正在尝试在Python中建立对象列表。我有一个名为foo的起始对象,该对象上有一个名为GetParent()的方法,该方法可返回另一个对象。我想做的是继续调用GetParent()直到返回None,但要跟踪列表中所有有效的对象。

执行此操作的明显方法似乎是这样的:

objects = list()
result = foo
while result:
    objects.append(result)
    result = result.GetParent()

出于好奇,您有什么方法可以代替Python在一行或两行中执行此操作?最初,我认为诸如sum / map / reduce之类的东西可能会被滥用以提供所需的行为,但是如果我能弄清楚这一点,我会被该死,因为您需要访问列表的最后一项才能调用{{1} }。

最Python化的方式是什么?

1 个答案:

答案 0 :(得分:1)

定义一个generator

def all_parents(obj):
    while obj:
        yield obj
        obj = obj.GetParent()

那么您可以做:

objects = list(all_parents(foo))

您实际上可能希望将此方法用作您的类中的方法。然后,您将其称为foo.all_parents()