是否可以嵌套所有功能?

for*_*vas 8 python

我有一个名为items的对象列表.每个对象都有一个属性state和一个属性children,它是另一个对象列表.每个子对象也有一个名为state的属性.我想知道的是,每件物品及其子女是否都处于快乐愉快的状态.

我和所有人一起做过(仅分析项目的状态):

if all(item.state in ['happy', 'cheerful'] for item in items):
   pass
Run Code Online (Sandbox Code Playgroud)

我想知道哪种方法不仅可以用于物品,还可以用于儿童.

Ben*_*ier 5

你在这里寻求一些递归:

def is_happy(items):
   return all(item.state in ['happy', 'cheerful'] for item in items) and all(is_happy(item.childs) for item in items)
Run Code Online (Sandbox Code Playgroud)

由于@tobias_k指出这应该更快,因为它只在项目上迭代一次:

def is_happy(items):
   return all(item.state in ['happy', 'cheerful'] and is_happy(item.childs) for item in items)
Run Code Online (Sandbox Code Playgroud)

它至少更具可读性.

在你只有两层物体的情况下,一个简单的对象也可以做到这一点.

def is_happy(items):
    happy_children = True
    for item in items:
        if any(child.state not in ['happy', 'cheerful'] for child in item):
            happy_children = False
            break
    return all(item.state in ['happy', 'cheerful'] for item in items) and happy_children
Run Code Online (Sandbox Code Playgroud)