从给定集合中筛选连续ID分组的最高薪资平均值组
数据处理问题
给定数据集
[ (1, 'A', 100), (2, 'X', 200), (3, 'D', 300), (5, 'B', 300), (6, 'Z', 300), (7, 'G', 300), ]
注:数据结构为(ID, 姓名, 薪资)
需求说明
- 以ID为依据,选取连续ID的对象组成大小为
limit=3的分组; - 若分组内存在缺失的ID(比如分组ID范围2、3、4中,ID=4不存在),则跳过该分组;
- 计算每个有效分组中薪资的平均值;
- 找出平均值最高的分组。
解决思路与实现
步骤分析
- 提取所有ID并建立ID到薪资的映射,同时对ID排序(保证遍历顺序正确);
- 遍历每个可能的起始ID,生成长度为3的连续ID范围;
- 检查该范围内的所有ID是否都存在于数据集中,筛选出有效分组;
- 对每个有效分组计算薪资平均值;
- 对比所有有效分组的平均值,找出数值最高的分组。
代码实现(Python)
data = [ (1, 'A', 100), (2, 'X', 200), (3, 'D', 300), (5, 'B', 300), (6, 'Z', 300), (7, 'G', 300), ] # 构建ID与薪资的映射,同时获取排序后的ID列表 id_to_salary = {item[0]: item[2] for item in data} sorted_ids = sorted(id_to_salary.keys()) limit = 3 valid_groups = [] # 遍历所有可能的起始ID for start_id in sorted_ids: end_id = start_id + limit - 1 # 检查当前连续ID范围内的所有ID是否都存在 is_valid = all(id in id_to_salary for id in range(start_id, end_id + 1)) if is_valid: # 计算该分组的薪资平均值 group_salaries = [id_to_salary[id] for id in range(start_id, end_id + 1)] avg_salary = sum(group_salaries) / limit valid_groups.append({ 'id_range': list(range(start_id, end_id + 1)), 'avg_salary': avg_salary, 'salaries': group_salaries }) # 找出平均值最高的分组 if valid_groups: top_group = max(valid_groups, key=lambda x: x['avg_salary']) print("平均值最高的分组信息:") print(f"ID范围:{top_group['id_range']}") print(f"薪资列表:{top_group['salaries']}") print(f"平均薪资:{top_group['avg_salary']}") else: print("不存在符合要求的有效分组")
运行结果
平均值最高的分组信息: ID范围:[5, 6, 7] 薪资列表:[300, 300, 300] 平均薪资:300.0
解释:示例中有效分组有两个,分别是[1,2,3](平均薪资200)和[5,6,7](平均薪资300),后者平均值更高。
内容的提问来源于stack exchange,提问作者Murtuza
相关产品推荐
相关产品推荐

