Python List操作

时间:2011-08-18 23:55:09

标签: python list coding-style

这是我的代码,但它看起来像非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

这种做法最“蟒蛇”的方式是什么?使用lambda过滤器功能?出于某些原因,在线实际上很少有例子可以使用比较属性的对象列表,它们总是使用实际字符串列表显示如何执行此操作,但这不太现实。

3 个答案:

答案 0 :(得分:7)

我会用:

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

这很短,并且与您的代码具有相同的优势,它会在找到第一个匹配时停止。

如果你经常这样做,速度是一个问题,你可以创建一个新的属性,这是一组子名称,然后只使用return childName in self.childNames,但你必须更新方法改变孩子以保持childNames的最新状态。

答案 1 :(得分:5)

我会这样做:

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

答案 2 :(得分:1)

用lambda做的一种方法:

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

但原始解决方案对我来说更清晰。