Python - 在混合数组(整数、列表)中查找值的每次出现

标签 python arrays for-loop

我有一个数组:x = [ [1, 2], 1, 1, [2, 1, [1, 2]] ] 其中我想计算数字 1 的每次出现次数,并将该数字存储在变量 one_counter 中。 x.count(1) 仅返回 2 次 1,这是不够的。

我下面的代码满足了我的目的,并将 5 存储在 one_counter 中,但是它看起来很乱并且对我来说感觉不符合 pythonic。

有什么建议可以改进它的 pythonicity 并将其扩展到更多维度的列表中吗?

谢谢!

x = [[1, 2], 1, 1, [2, 1, [1, 2]]]

one_counter = 0

for i in x:
    if type(i) == list:
        for j in i:
            if type(j) == list:
                for k in j:
                    if k == 1:
                        one_counter += 1

            else:
                if j == 1:
                    one_counter += 1

    else:
        if i == 1:
            one_counter += 1

最佳答案

你可以使用递归:

def flatten_count(iterable, element):
    count = 0
    for item in iterable:
        if item == element:
            count += 1
        if isinstance(item, list):
            count += flatten_count(item, element)
    return count

或者更简洁:

def flatten_count(iterable, element):
    return sum(
        flatten_count(item, element) if isinstance(item, list) else item == element
        for item in iterable 
    )

像这样使用:

>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> print(flatten_count(x, 1))
5

关于Python - 在混合数组(整数、列表)中查找值的每次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702036/

相关文章:

python - 函数参数中的空星号?

python - 从数组值过滤字典

c - 该程序不适用于 n > 9 ...当 n 是静态表达式时它工作正常

javascript - 如何使用 for 循环向 JS 变量添加值?

javascript - for(var i in array) VS for(i=0; i<array.length; i++)

python - Keras:致密层和激活层之间的形状不匹配

python - 如何安排作业在云中执行 Python 脚本以将数据加载到 bigquery?

python - 四舍五入到一定数量

Python:从索引完整的文件中导入数组

python - 数据框行迭代期间出错