Python 列表操作

5 投票
3 回答
596 浏览
提问于 2025-04-16 23:55

这是我写的代码,但看起来不像是Python的代码。

def __contains__(self, childName):
    """Determines if item is a child of this item"""
    for c in self.children:
        if c.name == childName:
            return True
    return False

用什么方式做这个最“Python”?用一个lambda过滤函数吗?不知道为什么,网上很少有例子能真正处理对象列表并比较它们的属性,很多例子都是用实际的字符串列表来演示,但这并不太现实。

3 个回答

1

用lambda表达式可以这样做:

from itertools import imap
return any(imap(lambda c: c.name == childName, self.children))

不过我觉得原来的解决方案更清晰。

5

我会这样做:

return childName in [c.name for c in self.children]
7

我会使用:

return any(childName == c.name for c in self.children)

这个写法简洁,而且和你的代码一样,有个好处就是它会在找到第一个匹配项时就停止。

如果你经常需要这样做,而且速度很重要的话,你可以创建一个新的属性,专门用来存储子项的名字集合。然后你只需要用 return childName in self.childNames 来检查就可以了。不过这样的话,你需要更新那些会改变子项的函数,以确保 childNames 始终是最新的。

撰写回答