Python List操作

asd*_*asd 5 python coding-style list

这是我的代码,但它看起来像非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
Run Code Online (Sandbox Code Playgroud)

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

Ned*_*der 7

我会用:

return any(childName == c.name for c in self.children)
Run Code Online (Sandbox Code Playgroud)

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

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


Gab*_*oss 5

我会这样做:

return childName in [c.name for c in self.children]
Run Code Online (Sandbox Code Playgroud)

  • 这样做的缺点是迭代所有self.children,并创建一个中间列表. (5认同)