Python 列表操作
这是我写的代码,但看起来不像是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 始终是最新的。