礼盒多级排序:总价→最贵→最便宜→编号的 Python 实现与详解
我们来分析这个问题,并写出一个清晰、正确的 Python 解决方案。 --- ### ✅ **问题解析** 我们需要对 `n` 个礼盒进行排序,每个礼盒有 `k` 件商品(价格为整数),排序依据是**多级优先级**: 1. **一级**:礼盒**总价格**(升序) 2. **二级**:礼盒中**最贵商品价格**(即 `max`,升序) 3. **三级**:礼盒中**最便宜商品价格**(即 `min`,升序) 4. **四级**:礼盒**编号**(升序,注意编号从 1 开始) > ⚠️ 注意:编号是输入顺序(第 1 行是礼盒 1,第 2 行是礼盒 2,……),不是价格或其它属性。 --- ### 🧩 **算法步骤** 1. 读入 `n` 和 `k` 2. 对每个礼盒(共 `n` 个): - 读入 `k` 个价格 - 计算:`total = sum(prices)`, `mx = max(prices)`, `mn = min(prices)` - 存储元组 `(total, mx, mn, index)`,其中 `index = i + 1`(因为编号从 1 开始) 3. 对所有元组按 `(total, mx, mn, index)` 升序排序(Python 元组默认字典序升序,完美匹配!) 4. 提取排序后的 `index`,输出成一行空格分隔 --- ### 💻 Python 实现代码 ```python n, k = map(int, input().split()) boxes = [] for i in range(n): prices = list(map(int, input().split())) total = sum(prices) mx = max(prices) mn = min(prices) # 存储 (总价格, 最大值, 最小值, 编号),编号为 i+1 boxes.append((total, mx, mn, i + 1)) # 多级排序:tuple 自动按元素顺序比较 boxes.sort(key=lambda x: (x[0], x[1], x[2], x[3])) # 提取编号 result = [str(box[3]) for box in boxes] print(" ".join(result)) ``` --- ### 🔍 验证样例 输入: ``` 4 3 3 5 2 4 1 5 2 2 4 3 4 3 ``` 计算各礼盒: | 编号 | 价格 | total | max | min | |------|----------|--------|-----|-----| | 1 | [3,5,2] | 10 | 5 | 2 | | 2 | [4,1,5] | 10 | 5 | 1 | | 3 | [2,2,4] | 8 | 4 | 2 | | 4 | [3,4,3] | 10 | 4 | 3 | 排序键: - 1: (10, 5, 2, 1) - 2: (10, 5, 1, 2) - 3: (8, 4, 2, 3) - 4: (10, 4, 3, 4) 排序后顺序(按元组升序): 1. `(8,4,2,3)` → 3 2. `(10,4,3,4)` → 4 3. `(10,5,1,2)` → 2 4. `(10,5,2,1)` → 1 ✅ 输出:`3 4 2 1` —— 完全匹配! --- ### 📌 小贴士(开发建议) - Python 的 `tuple` 排序天然支持多级优先级,无需手动写复杂比较函数。 - 使用 `key=` 参数比自定义 `cmp_to_key` 更简洁安全。 - 数据规模很小(n ≤ 1000),无需优化,清晰第一。 - 注意编号从 `1` 开始,别用 `0` 索引直接当编号! --- ######[AI写代码神器 | 1000点数解答 | 2026-03-16 12:13:21]
- Python 实现赛车手积分排名:从数据到清晰榜单(字节豆包 | 182点数解答 | 2024-10-20 16:16:44)275
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)454
- 礼盒多级排序:总价→最贵→最便宜→编号的 Python 实现与详解(阿里通义 | 1000点数解答 | 2026-03-16 12:13:21)3
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)340
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)223
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)413
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)402
- 用Python处理商品销售数据:替换类别、合并类目并输出前5行(百度文心 | 486点数解答 | 2024-08-23 09:14:21)308
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)308
- Python匈牙利算法:求解二分图最大匹配边数(含代码及详细解析)(字节豆包 | 715点数解答 | 2025-12-12 18:44:19)48
- 二分图最大匹配边数求解:从输入到代码实现全解析(字节豆包 | 275点数解答 | 2025-12-13 21:24:15)47
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)387