如何根据数值范围从列表中返回首个匹配结果
问题概述
给定以下年龄分类规则表,需根据输入的年龄值,按表格从上到下的顺序返回第一个满足 Minimum ≤ 年龄 ≤ Maximum 的Category:
| Minimum | Maximum | Category |
|---|---|---|
| 1 | 11 | 11U |
| 1 | 13 | 13U |
| 14 | 15 | 14-15 |
| 16 | 17 | 16-17 |
| 18 | 20 | JR |
| 15 | 34 | SR |
| 35 | 39 | 35 |
| 40 | 44 | 40 |
| 45 | 49 | 45 |
示例:输入8返回11U,输入16返回16-17(而非后续的SR)。
实现方案
1. Python 实现
将规则按顺序存入列表,遍历判断年龄是否在当前区间,匹配到即返回对应分类:
def get_category(age): # 严格按表格顺序定义规则 category_rules = [ (1, 11, "11U"), (1, 13, "13U"), (14, 15, "14-15"), (16, 17, "16-17"), (18, 20, "JR"), (15, 34, "SR"), (35, 39, "35"), (40, 44, "40"), (45, 49, "45") ] for min_age, max_age, category in category_rules: if min_age <= age <= max_age: return category # 无匹配时返回None或自定义提示 return None # 测试用例 print(get_category(8)) # 输出: 11U print(get_category(16)) # 输出: 16-17 print(get_category(25)) # 输出: SR
2. JavaScript 实现
同样按顺序遍历规则数组,找到第一个匹配项返回:
function getCategory(age) { const categoryRules = [ { min: 1, max: 11, category: "11U" }, { min: 1, max: 13, category: "13U" }, { min: 14, max: 15, category: "14-15" }, { min: 16, max: 17, category: "16-17" }, { min: 18, max: 20, category: "JR" }, { min: 15, max: 34, category: "SR" }, { min: 35, max: 39, category: "35" }, { min: 40, max: 44, category: "40" }, { min: 45, max: 49, category: "45" } ]; for (const rule of categoryRules) { if (age >= rule.min && age <= rule.max) { return rule.category; } } return null; } // 测试用例 console.log(getCategory(8)); // "11U" console.log(getCategory(16)); // "16-17"
3. Excel 实现(适用于桌面表格工具)
如果需要在Excel中实现,可使用XLOOKUP(Excel 365/2021及以上):
假设年龄在A1单元格,规则表在D2:F10区域(D=Minimum,E=Maximum,F=Category):
=XLOOKUP(TRUE, (D$2:D$10<=A1)*(E$2:E$10>=A1), F$2:F$10, "无匹配", 0, 1)
- 原理:生成布尔数组标记符合条件的行,
XLOOKUP按顺序查找第一个TRUE对应的分类值。
旧版Excel可使用数组公式(输入后按Ctrl+Shift+Enter):
=INDEX(F$2:F$10, MATCH(TRUE, (D$2:D$10<=A1)*(E$2:E$10>=A1), 0))
内容的提问来源于stack exchange,提问作者Harlan
相关产品推荐
相关产品推荐

