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')
优点:
- 正确地处理了前导零的问题(使用
int()
转换) - 正确地分割了整数和小数部分
- 基本实现了千分位逗号的添加逻辑
- 考虑了小数部分的保留
可以改进的地方:
-
千分位逗号逻辑:当前的实现是从右向左每3位添加逗号,但逻辑可以更简洁。Python有内置的格式化方法可以更简单地实现这个功能。
-
变量命名:
re
作为变量名容易与import re
的re
模块混淆,建议使用更有意义的名称如result_str
。 -
代码结构:可以将整数部分的处理单独封装成一个函数,提高代码可读性。
-
边界情况:没有处理输入为空字符串或纯小数(如".123")的情况。
-
效率:当前实现使用了多个列表操作和反转,可以优化为更直接的方式。
-
注释:有些注释可以更明确,比如解释为什么
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')
主要改进点:
- 使用字符串反转和切片来简化千分位处理
- 使用更清晰的变量名和逻辑结构
- 修复了原代码中可能多出逗号的问题
- 保持了原有功能不变
integer_part[::-1]
是 Python 中字符串切片的一个特殊用法,用于反转字符串。
[::-1]
表示从字符串的开头到结尾(:
),以步长 -1(即倒序)的方式截取。- 效果相当于将字符串 "123" 变成 "321"。