如何使用Python列表推导式单行重写for循环与条件判断逻辑
优化实现方案
你可以通过列表推导式把逐字符遍历、移位计算、边界判断、结果收集的逻辑全部压缩到单行实现,不需要提前初始化空列表再逐次append。
严格复刻原逻辑的实现
以下代码和你给出的原始代码逻辑、输出结果完全一致:
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] var = 'hello' coded_word = [alphabet[pos % 25 if pos > 24 else pos] for i in var for pos in [alphabet.index(i) + 3]]
运行后得到的coded_word和原代码输出完全相同,为['k', 'h', 'o', 'o', 'r']。
简化版实现
原代码中的边界判断存在冗余:对于小于25的非负整数,对25取模的结果等于数值本身,因此可以直接省略if判断,把代码进一步简化为可读性更高的版本:
coded_word = [alphabet[(alphabet.index(i) + 3) % 25] for i in var]
这个版本的运行结果和原代码没有任何差异。
逻辑对应关系
- 推导式末尾的
for i in var对应原代码的外层循环,逐一遍历明文中的每个字符 - 推导式前部的位置计算逻辑,完全对应原代码中「取索引→加移位值→边界处理→取密文字符」的流程
- 列表推导式会自动把所有计算得到的密文字符收集为列表,不需要手动调用
append方法。
内容的提问来源于stack exchange,提问作者Manish Sutradhar
相关产品推荐
相关产品推荐

