我正在试图弄清楚如何计算嵌套列表中的项目数。我一直坚持如何开始这个。例如,如果我要做NestLst([]),它将打印0但是如果我做
NestLst([[2, [[9]], [1]], [[[[5]]], ['hat', 'bat'], [3.44], ['hat', ['bat']]]]
它将返回9.如何开始这个或如何做到这一点的任何帮助将是伟大的。
谢谢!
答案 0 :(得分:1)
import collections
def NestLst(seq):
if isinstance(seq, str) or not isinstance(seq, collections.Iterable):
return 1
return sum(NestLst(x) for x in seq)
>>> NestLst([[2, [[9]], [1]], [[[[5]]], ['hat', 'bat'], [3.44], ['hat', ['bat']]]])
9
答案 1 :(得分:1)
def total_length(l):
if isinstance(l, list):
return sum(total_length(x) for x in l)
else:
return 1
答案 2 :(得分:0)
您的问题包含关键字:递归。 创建一个迭代列表的函数,如果找到一个非列表项,则向计数中添加一个,如果找到一个列表,则会自动调用。
您的代码的问题是您使用的是长度而不是递归调用。
这是一个pythonic伪代码:
def count(list):
answer = 0
for item in list:
if item is not a list:
answer += 1
else:
answer += number of items in the sublist (recursion will be useful here)
答案 3 :(得分:0)
您可以尝试递归调用reduce()。这样的事情:
>>> def accumulator(x,y):
... if isinstance(y, list):
... return reduce(accumulator,y,x)
... else:
... return x+1
...
>>> reduce(accumulator, [10,20,30,40] ,0)
4
>>> reduce(accumulator, [10,[20,30],40] ,0)
4
>>> reduce(accumulator, [10,20,30,40,[]] ,0)
4
>>> reduce(accumulator, [10,[20,[30,[40]]]] ,0)
4
>>> reduce(accumulator, [10*i for i in range(1,5)] ,0)
4
一些通知:
0
调用结束时的reduce()
是初始值。这可能是一个陷阱,因为省略它时你仍然有一个有效的电话,但结果将不是你想要的。我强烈建议在实用程序函数中包装初始调用。