如何统计Python嵌套列表中各数字的子列表出现频次?
统计嵌套列表中数字在子列表的出现频次
要实现需求,核心是每个子列表中的重复数字只计一次,下面提供几种实用的实现方式:
方法一:基础循环实现(易理解)
手动遍历每个子列表,先通过集合去重,再逐个更新数字的出现次数:
nested_list = [[1, 2, 3], [1, 5], [4, 2, 6]] count_dict = {} for sublist in nested_list: # 转集合去重,避免同一子列表内重复数字多次计数 unique_nums = set(sublist) for num in unique_nums: if num in count_dict: count_dict[num] += 1 else: count_dict[num] = 1 print(count_dict) # 输出: {1: 2, 2: 2, 3: 1, 4: 1, 5: 1, 6: 1}
方法二:使用collections.defaultdict简化逻辑
借助defaultdict省去判断键是否存在的步骤,代码更简洁:
from collections import defaultdict nested_list = [[1, 2, 3], [1, 5], [4, 2, 6]] count_dict = defaultdict(int) for sublist in nested_list: for num in set(sublist): count_dict[num] += 1 # 可选:转换为普通字典 count_dict = dict(count_dict) print(count_dict)
方法三:使用collections.Counter一键统计
利用生成器表达式生成所有去重后的数字,再用Counter直接统计频次,写法最简洁:
from collections import Counter nested_list = [[1, 2, 3], [1, 5], [4, 2, 6]] # 生成所有子列表去重后的数字迭代器 all_unique_nums = (num for sublist in nested_list for num in set(sublist)) count_dict = dict(Counter(all_unique_nums)) print(count_dict)
内容的提问来源于stack exchange,提问作者S_S
相关产品推荐
相关产品推荐

