2016-02-17 2 views
1

Я, наконец, обойдусь рекурсией на Python и пытаясь подсчитать количество вхождений целевого номера в list. Тем не менее, я столкнулся с проблемами с подсчетом явлений в вложенных list числах.Рекурсивно подсчет вхождений во вложенный список чисел

Например

def count(lst, target): 

    if lst == []: 
     return 0 
    if lst[0] == target: 
     return 1 + count(lst[1:], target) 
    else: 
     return 0 + count(lst[1:], target) 

Выходной

>>> count([1,2,3,[4,5,5],[[5,2,1],4,5],[3]], 1)

Output: 1

Expected output: 2

Есть простой способ, чтобы сгладить вложенные списки в Python? Или простой способ для меня учитывать тот факт, что в моем коде есть вложенный список?

+1

http://stackoverflow.com/questions/11377208/recursive-generator-for-flattening-nested -lists? rq = 1 Это может быть полезно. – Krash

ответ

2
def count(lst, target): 
    n = 0 
    for i in lst: 
     if i == target: 
      n += 1 
     elif type(i) is list: 
      n += count(i, target) 
    return(n) 
1

Вам просто нужен дополнительный случай, чтобы иметь дело с lst[0] быть Подсписок, как:

def count(lst, target): 

    if lst == []: 
     return 0 
    if lst[0] == target: 
     return 1 + count(lst[1:], target) 
    # If first element is a list, descend into it to count within it, 
    # and continue with counts of remaining elements 
    elif type(lst[0]) == list: 
     return count(lst[0], target) + count(lst[1:], target) 
    else: 
     return 0 + count(lst[1:], target) 
+0

Спасибо за помощь! – 23k