递归函数来计算嵌套列表中的所有项目?

时间:2014-01-26 22:50:20

标签: python list recursion nested

我正在尝试创建一个计算嵌套列表中所有项目的方法。所以count([[3, 2] , [2]]) == 3。但是,它是一个Class属性,所以我不能简单地做:

def count(L, target):
    s = 0
    for i in L: 
        if isinstance(i, list): 
            s += count(i, target)
        else: 
            if i == target: 
                s += 1

    return s 

相反,我尝试这样做,但我得到一个最大递归深度错误。我不知道为什么。在您查看代码之前,需要记住以下几点:(1)我希望给定的基本列表仅包含列表,因此它将具有以下格式:[ [], ]。另外(2)子列表除项目外不包含任何内容:[ [item, item], [item] ]

def count(self, stack=None):
    n = 0
    if stack:
        n += len(stack)
    else:
        for i in self._items:
            if isinstance(i, list):
                n += self.count(i)

    return n

2 个答案:

答案 0 :(得分:1)

    if stack:

在布尔上下文中,空列表被视为false。你想要if stack is not None

为什么要使用递归?你不需要它。

def count(self):
    return sum(len(item) for item in self._items)

答案 1 :(得分:0)

如果您的列表只嵌套一层,这很容易。

class MyClass:
    def __init__(self, items):
        self.items = items

    def count(self):
        return sum(len(x) for x in self.items)

a = MyClass([[3,2],[2]])
b = MyClass([[1,2,3],[4,5,6],[7],[]])
print(a.count()) # 3
print(b.count()) # 7