我正在尝试创建一个计算嵌套列表中所有项目的方法。所以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
答案 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