You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python统计指定字符串列表元素在嵌套列表中的出现次数?

统计嵌套列表中指定元素的出现次数

问题场景

给定嵌套字符串列表和搜索列表:

animal = [[['cat', 'cat', 'dog'], ['cat', 'cat', 'dog'], ['cat', 'cat', 'dog']]]
number = ['cat', 'dog']

需要统计number中每个元素在animal里的出现次数,比如'cat'出现6次,'dog'出现3次。

之前尝试的count方法只能处理单层列表,手动写循环只能单个元素统计,效率低下,且转字符串判断的方式存在逻辑错误(会误匹配子串,计数逻辑也不对)。


解决方案

方法1:扁平化列表 + Counter统计

先把多层嵌套列表转成单层,再用collections.Counter一键统计,最后提取目标元素的结果:

from collections import Counter

# 递归扁平化嵌套列表
def flatten(nested_list):
    for item in nested_list:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

# 初始化数据
animal = [[['cat', 'cat', 'dog'], ['cat', 'cat', 'dog'], ['cat', 'cat', 'dog']]]
number = ['cat', 'dog']

# 统计所有元素次数
total_counts = Counter(flatten(animal))
# 筛选出number中的元素结果
result = {key: total_counts[key] for key in number}

print(result)  # 输出: {'cat': 6, 'dog': 3}

方法2:手动递归遍历计数

如果不想用Counter,可以初始化计数字典,递归遍历嵌套列表时更新对应元素的计数:

animal = [[['cat', 'cat', 'dog'], ['cat', 'cat', 'dog'], ['cat', 'cat', 'dog']]]
number = ['cat', 'dog']

# 初始化目标元素的计数,默认0
count_dict = {key: 0 for key in number}

# 递归遍历嵌套列表
def count_target_items(lst):
    for item in lst:
        if isinstance(item, list):
            count_target_items(item)
        else:
            # 只统计number里的元素
            if item in count_dict:
                count_dict[item] += 1

count_target_items(animal)
print(count_dict)  # 输出: {'cat': 6, 'dog': 3}

原代码问题说明

你之前写的循环逻辑有两个明显问题:

  1. 将整个列表转成字符串判断in,会误匹配子串(比如如果有元素'cattle',也会被认为包含'cat');
  2. 循环里每次都判断str(number[0]) in str(animal),这个条件每次都是True,最后得到的是循环次数,不是实际出现次数。

内容的提问来源于stack exchange,提问作者kfnwtfn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:36:24