获取100-1000范围内回文数的两种Python实现哪种更优?
两种三位数回文数实现方案对比
首先明确两种实现的代码:
方案1:算术运算校验首尾位
palindromes = [n for n in range(100, 1000) if n // 100 == n % 10] print(palindromes)
方案2:字符串反转比对
palindromes = [i for i in range(100, 1001) if str(i) == str(i)[::-1]] print(palindromes)
对比结论
性能层面:方案1更优
- 执行速度:算术运算是Python底层原生支持的数值操作,没有额外对象创建开销。方案2需要多次生成字符串对象、做反转和逐字符比对,开销远高于数值运算。实际测试同范围计算,方案1速度是方案2的3~4倍。
- 资源占用:方案1全程仅操作整数,无临时对象生成,内存占用可忽略。方案2单次校验就会生成至少2个临时字符串,累计产生的大量临时对象会提升内存占用,增加垃圾回收压力。
实际开发选择建议
- 如果需求固定为仅处理三位数的回文数判断,直接选方案1,针对性优化后性能最高,逻辑也足够简单易懂。
- 如果需求后续可能扩展到任意位数的回文数判断,选方案2:不需要针对数字位数调整校验逻辑,通用性更强,代码可读性更高,新手也能一眼看懂判断逻辑。
额外小提示:两个代码的范围参数有细微差异,方案1的
range(100, 1000)刚好覆盖所有三位数,范围精准;方案2的range(100, 1001)多包含了1000,不过1000本身不是回文数,不会影响最终输出结果,属于代码小冗余。
内容的提问来源于stack exchange,提问作者clawingcode
相关产品推荐
相关产品推荐

