首页 > 解决方案 > 如何计算具有更多嵌套列表/字典的列表中给定字符串的出现次数?

问题描述

在一个技术电话屏幕上,我得到了一个类似于下面的列表,并要求我计算字符串“a”出现的次数:

input = ['a', 'b', ['a', 'b', {'a': ['b', 'a', [{'b': ['a', 'b', {'a': 'a'}]}]]}]]

如您所见,除了“a”是列表中的一个项目之外,它还可以是嵌套列表中的一个项目,以及嵌套字典中的键和/或值。

这是我目前在 Python 中的代码:

def count_letter_a(arr):

    count = 0

    for item in arr:
        if item == 'a':
            count += 1
        elif isinstance(item, list):
            count_letter_a(item)
        elif isinstance(item, dict):
            for k, v in item.items():
                pass

    return count

我被困在如何处理我的函数的字典键/值部分。我需要做什么?

标签: pythonalgorithmrecursion

解决方案


您可以只添加'a'键和值的计数,或者简单地递归地将其直接应用于项目。这要求您也计算出现次数tuples(我包括在内sets以完成内置集合):

def count_a(obj):
    if isinstance(obj, (list, tuple, set)):
        return sum(map(count_a, obj))
    if isinstance(obj, dict):
        return sum(map(count_a, obj.items()))
    if obj == 'a':
        return 1
    return 0

>>> x = ['a', 'b', ['a', 'b', {'a': ['b', 'a', [{'b': ['a', 'b', {'a': 'a'}]}]]}]]
>>> count_a(x)
7

推荐阅读