这是我尝试过的:
def recursive_list_counter(l):
sum = 0
for e in l:
if type(e) == type([]):
#print e
sum += 1
recursive_list_counter(e)
return sum
# should be 6 if I count the first also
recursive_list_counter([[[13, 7], 90], 2, [1, 100, [5, [2]]], 8, 6])
我想使用递归来检索列表中的列表数量,也计算原始列表。
答案 0 :(得分:10)
您的递归调用忽略返回的内容。添加返回值:
def recursive_list_counter(l):
sum = 0
for e in l:
if isinstance(e, list):
sum += 1
sum += recursive_list_counter(e)
return sum
请注意,计数中会忽略外部列表,因此调用返回5而不是6。
此外,您应该使用isinstance()
来测试对象是否属于给定类型。
如果您想查看6
,请计算函数中的当前列表,并将嵌套列表计算到递归调用中:
def recursive_list_counter(l):
sum = 1
for e in l:
if isinstance(e, list):
sum += recursive_list_counter(e)
return sum
答案 1 :(得分:9)
对于您给出的示例,如果您拥有的只是列表中的数字,则可以尝试转换为字符串并计算[
的数量
>>> li = [[[13, 7], 90], 2, [1, 100, [5, [2]]], 8, 6]
>>> str(li).count('[')
6
答案 2 :(得分:3)
我认为这应该可以解决问题。 但我想我太慢了,我已经看到了其他3个答案。 :P
#!/usr/bin/env python
def lcount(l):
count = 0
if isinstance(l, list):
count+=1
count+=sum([lcount(x) for x in l])
return count
list_ = [ [ [1, 2, 3], [1, 4, 5], [7, 8, 9]], [ 1, 2, 7], 1, 3, ]
print lcount(list_)
答案 3 :(得分:3)
真正的功能性解决方案是:
def recursive_list_counter(li):
return 1 + sum(map(recursive_list_counter, li)) if isinstance(li, list) else 0
要计算列表中的所有元素,请使用此略微更改的版本:
def recursive_element_counter(li):
return sum(map(recursive_element_counter, li)) if isinstance(li, list) else 1
答案 4 :(得分:3)
三个要点:
isinstance
检查类型sum
用作变量,因为它已经是内置函数not isinstance(l, list)
)这是你的功能:
def recursive_list_counter(l):
if not isinstance(l, list):
return 0
return 1 + sum(recursive_list_counter(e) for e in l)
答案 5 :(得分:2)
实际上,问题很简单。每次调用recursive_list_counter
时,都会创建一个新的局部变量sum
,而不是递增全局变量。
sum = 0
def recursive_list_counter(l):
global sum
for e in l:
if type(e) is list: #this is the same, but a better practice.
#print e
sum += 1
recursive_list_counter(e)
return sum
recursive_list_counter([[[13, 7], 90], 2, [1, 100, [5, [2]]], 8, 6]) #returns 5
您还可以递归递增和:
if type(e) is list:
sum += 1
sum += recursive_list_counter(e)
希望这有帮助!