我有一个名为items的对象列表.每个对象都有一个属性state和一个属性children,它是另一个对象列表.每个子对象也有一个名为state的属性.我想知道的是,每件物品及其子女是否都处于快乐或愉快的状态.
我和所有人一起做过(仅分析项目的状态):
if all(item.state in ['happy', 'cheerful'] for item in items):
pass
Run Code Online (Sandbox Code Playgroud)
我想知道哪种方法不仅可以用于物品,还可以用于儿童.
你在这里寻求一些递归:
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)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |