首页 > 解决方案 > 创建递归函数以查找具有特定属性值的对象

问题描述

我有一个基于以下的对象列表:

class foo:
    def __init__(self,name):
         self.name = name
         self.children = [] #other instances contained in this list

我创建了一个函数,该函数将在.name与搜索词匹配时找到该对象,并将搜索这些对象的所有子对象:

def find(lst,search_term):
    for obj in lst:
        if obj.name == search_term:
            return obj
        elif obj.children != []:
            try:
                if find(obj.children,search_term).name == search_term:
                    return find(obj.children,search_term)
            except AttributeError:
                pass

有没有更优雅的方式来做到这一点?

标签: python

解决方案


您的“正常”基本情况很好。您的“失败”基本情况应该是明确的:

for obj in lst:
    if obj.name == search_term:
        return obj
    else:
        ...
# If all searches failed
return None

您的递归步骤有多余的工作:(1)您测试返回对象的名称,当您已经知道它匹配时;(2) 您使用相同的数据重复两次。尝试简化逻辑:遍历obj列表直到找到匹配项。

    else:
        if obj.children:
            found_child = find(obj.children,search_term)
            if found_child:
                return found_child

这段代码代替了上面块中的省略号。


推荐阅读