递归计算嵌套数字列表中的出现次数

Posted

技术标签:

【中文标题】递归计算嵌套数字列表中的出现次数【英文标题】:Recursively counting occurrences in a nested list of numbers 【发布时间】:2016-05-28 15:54:15 【问题描述】:

我终于开始使用 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 中展平嵌套列表?还是一种简单的方法来解释我的代码中有一个嵌套列表这一事实?

【问题讨论】:

***.com/questions/11377208/… 这可能会有所帮助。 【参考方案1】:
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

【讨论】:

【参考方案2】:

您只需要一个额外的案例来处理 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)

【讨论】:

以上是关于递归计算嵌套数字列表中的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

递归计算字符串中的字符出现次数

递归计算对象在字符串中出现的次数

LeetCode答题记录233. 数字1的个数

使用 sqlite 递归计算出现次数

如何计算fibonacci函数的递归调用次数

number 在数组中出现的次数