如何统计数组分组中包含目标数字的组数(每组仅计一次)
嘿,这个需求我太懂了!核心就是按「用户组」维度去重统计——只要某个组里的任意子数组包含目标数字,不管组内出现多少次,都只给这个组计1次。我给你拆解下实现思路,再用Python写个直观的示例:
核心思路
- 先把你的数据整理成「组名: 子数组列表」的结构(比如字典,方便遍历);
- 逐个检查每个组:只要该组的任意一个子数组里存在目标数字,就标记这个组符合条件;
- 最后统计符合条件的组的总数即可。
代码实现
假设你的数据是这样的字典结构(和你举的例子完全对应):
# 模拟你的分组数据 group_data = { "Tim": [[1, 2], [1, 3, 4], [3], [3, 6, 7]], "Beth": [[1, 3], [2], [7, 8]], "Luke": [[1], [2, 4], [1]] } target_num = 3 # 要查找的目标数字
然后用几行代码就能搞定统计:
# 初始化计数器 group_count = 0 # 遍历每个用户组 for group_name, subarrays in group_data.items(): # 检查当前组是否包含目标数字:只要有一个子数组里有,就算符合条件 has_target = any(target_num in subarray for subarray in subarrays) if has_target: group_count += 1 print(f"目标数字{target_num}共在{group_count}个组中出现") # 输出:目标数字3共在2个组中出现
如果想封装成可复用的函数,更方便后续调用:
def count_target_groups(group_data, target): # 用生成器表达式简化计数逻辑 return sum(1 for _, subarrays in group_data.items() if any(target in sa for sa in subarrays)) # 调用示例 result = count_target_groups(group_data, 3) print(result) # 输出2
关键细节解释
any()函数是这里的核心:它会遍历组内的所有子数组,只要找到一个包含目标数字的子数组,就立刻返回True,不用再继续检查后续子数组,效率很高;- 不管组里有多少个子数组包含目标数字,这个组只会被计数一次,完全符合你“组内多次出现仍计一次”的要求。
如果你的原始数据结构不是字典(比如是列表套元组),只需要调整遍历的方式,核心的any()判断逻辑完全不变~
内容的提问来源于stack exchange,提问作者isoman4not5
相关产品推荐
相关产品推荐

