当前位置: 首页 > news >正文

3 数字字符串格式化

3 数字字符串格式化

原代码

import redef solution(s: str) -> str:parts = s.split(".")# 分离整数和小数部分integer_part = str(int(parts[0]))  # 去除前导零result = []  # 处理整数部分,添加千分位逗号k=0  # 从右向左遍历整数部分for i in range(len(integer_part)-1,-1,-1):result.append(integer_part[i])if k<2: # 每3位数字后插入逗号k=k+1else:result.append(",")k=0if result[len(result)-1]==',':result.pop()result.reverse()re=''if len(parts) > 1:# 添加小数部分re="".join(result)+"."+parts[1]else:re="".join(result)return reif __name__ == '__main__':print(solution("1294512.12412") == '1,294,512.12412')print(solution("0000123456789.99") == '123,456,789.99')print(solution("987654321") == '987,654,321')

优点:

  1. 正确地处理了前导零的问题(使用int()转换)
  2. 正确地分割了整数和小数部分
  3. 基本实现了千分位逗号的添加逻辑
  4. 考虑了小数部分的保留

可以改进的地方:

  1. 千分位逗号逻辑:当前的实现是从右向左每3位添加逗号,但逻辑可以更简洁。Python有内置的格式化方法可以更简单地实现这个功能。

  2. 变量命名re作为变量名容易与import rere模块混淆,建议使用更有意义的名称如result_str

  3. 代码结构:可以将整数部分的处理单独封装成一个函数,提高代码可读性。

  4. 边界情况:没有处理输入为空字符串或纯小数(如".123")的情况。

  5. 效率:当前实现使用了多个列表操作和反转,可以优化为更直接的方式。

  6. 注释:有些注释可以更明确,比如解释为什么k从0开始计数。

优化代码

import redef solution(s: str) -> str:# 分离整数和小数部分parts = s.split(".")# 处理整数部分:去除前导零integer_part = str(int(parts[0]))# 处理整数部分,添加千分位逗号reversed_integer = integer_part[::-1]  # 反转字符串便于处理chunks = []# 每3位分割for i in range(0, len(reversed_integer), 3):chunk = reversed_integer[i:i+3]chunks.append(chunk)# 用逗号连接并反转回来formatted_integer = ",".join(chunks)[::-1]# 处理小数部分if len(parts) > 1:return formatted_integer + "." + parts[1]else:return formatted_integerif __name__ == '__main__':print(solution("1294512.12412") == '1,294,512.12412')print(solution("0000123456789.99") == '123,456,789.99')print(solution("987654321") == '987,654,321')

主要改进点:

  1. 使用字符串反转和切片来简化千分位处理
  2. 使用更清晰的变量名和逻辑结构
  3. 修复了原代码中可能多出逗号的问题
  4. 保持了原有功能不变

integer_part[::-1] 是 Python 中字符串切片的一个特殊用法,用于反转字符串

  • [::-1] 表示从字符串的开头到结尾:),以步长 -1(即倒序)的方式截取。
  • 效果相当于将字符串 "123" 变成 "321"。
http://www.dtcms.com/a/312175.html

相关文章:

  • 安灯系统(Andon System)
  • h3c路由器查看温度是否正常
  • 记录一次Spring Cloud Gateway配置的跨域处理:解决 ‘Access-Control-Allow-Origin‘ 头包含多个值的问题
  • 【Shell自动化脚本——for循环创建账户,测试主机连通性,for循环密码的修改】
  • 【Java面试题】一分钟了解反射机制
  • 切换python多版本
  • 中州养老项目:Mybatis自动填充拦截器
  • 机器学习项目从零到一:加州房价预测模型(PART 2)
  • 李宏毅深度学习教程 第6-7章 自注意力机制 + Transformer
  • NVIDIA GPU架构
  • 浅拷贝与深拷贝的区别
  • 断路器瞬时跳闸曲线数据获取方式
  • 关于Sort的补充
  • SpringBoot 02 AOP
  • 王者荣耀模拟器:一款基于Python的文本角色扮演游戏
  • 译| Netflix内容推荐模型的一些改进方向
  • 测试时扩散的深度研究助手
  • Redis实战(6)-- 慢查询运用与理解
  • 图像加密学习日志————论文学习DAY4
  • 档案馆可视化:历史宝库的数字新貌
  • 使用 MySQL Shell 进行 MySQL 单机到 InnoDB Cluster 的数据迁移实践
  • 【Django】-5- ORM的其他用法
  • RAWINPUT避坑指南(涉及GetRawInputData/GetRawInputBuffer)
  • 详解Python标准库之命令行界面库
  • .env 文件
  • WinMerge:文件对比工具,支持各种格式文件对比,永久免费使用!
  • 软件交付终极闸口:验收测试全解析
  • GCC(GNU Compiler Collection)与人工智能实例
  • 基于深度学习的医学图像分析:使用MobileNet实现医学图像分类
  • 第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年12月18日真题