Python中如何不使用字典高效将字母列表转换为对应数值列表
无字典实现字母列表到数值列表的转换方案
你当前用的多层if/elif/else分支方案,会随着规则字母数量增多线性降低判断效率,且规则修改维护成本高,以下两种方案都不需要使用字典,执行效率和可维护性更好:
方案1:平行顺序列表索引匹配
核心逻辑是维护两个长度一致、位置严格对应的列表,一个存规则字母,一个存对应数值,转换时通过字母在规则字母列表的索引位置,直接取同位置的数值即可。
# 定义顺序一一对应的规则 rule_chars = ['F', 'G', 'H', 'J', 'K'] rule_nums = [10, 20, 30, 40, 50] # 待转换的字母列表,注意字母需要加引号定义为字符串类型 letters = ['F', 'G', 'H', 'F', 'J', 'K'] # 列表推导式直接完成转换 result = [rule_nums[rule_chars.index(c)] for c in letters] print(result) # 输出:[10, 20, 30, 10, 40, 50]
- 注意:使用前建议先校验待转换字母是否都在
rule_chars范围内,否则会触发索引不存在的报错。 - 适用场景:映射规则没有明显数学规律、后续可能频繁增删改映射关系的场景,修改规则只需要调整两个列表的对应元素即可。
方案2:ASCII码计算映射
如果你的映射规则存在固定数学规律,可以直接通过字母的ASCII编码值计算对应数值,不需要额外存储映射表,是所有方案里执行效率最高的。
结合你给出的规则:F/G/H为连续字母对应10/20/30,跳过I之后J/K对应40/50,刚好可以通过偏移量计算:
letters = ['F', 'G', 'H', 'F', 'J', 'K'] result = [] for c in letters: diff = ord(c) - ord('F') # F/G/H对应偏移量0/1/2,J/K对应偏移量4/5 result.append((diff + 1)*10 if diff <=2 else diff *10) print(result) # 输出:[10, 20, 30, 10, 40, 50]
- 适用场景:映射规则固定、有明确计算规律的场景,不需要额外维护映射结构。
- 缺点:如果后续新增无规律的映射值,调整计算逻辑的成本较高。
补充提醒:你问题里写的
letters = [F, G, H, F, J, K]是语法错误,不加引号的F/G会被Python识别为变量名而非字符,运行会直接报变量未定义的错误,记得给所有字母加单/双引号声明为字符串。
内容的提问来源于stack exchange,提问作者eggzeyy
相关产品推荐
相关产品推荐

