Python数字、字符串、列表三类基础类型需理解行为边界与转换惯性:数字优先用float()再转int()或round(),精度计算用Decimal("str");字符串拼接用f-string或format(),切片注意split/rsplit差异;列表推导式聚焦单一目的,去重用dict.fromkeys(),展平用嵌套推导式;混合操作时注意格式化与安全转换。

Python里数字、字符串、列表这三类基础数据类型,用对了能少写一半代码,出错率也低。关键不是记语法,而是理解它们的“行为边界”和“转换惯性”。
数字:别在int和float之间硬转,先看来源
从用户输入、文件读取或API返回的数字,大概率是字符串。直接int("3.14")会报错,但float("3.14")可以。需要整数?先转float再用int()截断,或用round()四舍五入——注意int()不四舍五入,只去小数部分。
- 处理可能带空格或单位的数字字符串(如" 42kg "),先strip()再用re.findall(r'[\d.]+', s)提取数字部分
- 做精确计算(比如金额),避开float,改用decimal.Decimal,初始化时传字符串:Decimal("19.99")
- 判断一个值是否为数字类型,用isinstance(x, (int, float, Decimal)),别用type(x) == int——因为子类可能失效
字符串:切片和format比+拼接更稳,split/rsplit要分清场景
字符串不可变,每次+都生成新对象。简单拼接用f-string(Python 3.6+),含逻辑或复用变量时用str.format()。路径、SQL语句这类结构化文本,优先用pathlib.Path或sqlalchemy.text(),别手拼。
- split()默认按空白切,且合并连续空白;split(' ')才严格按单个空格——处理制表符或多余空格时容易踩坑
- 想从右往左切(比如取文件扩展名),用rsplit('.', 1),第二个参数限制切1次,避免a.b.c.txt被切成三段
- 检查字符串是否全数字,用s.isdigit(),但它不认负号和小数点;需要更准的判断,用s.replace('.','').replace('-','').isdigit()或正则
列表:推导式不是炫技,是让逻辑一目了然
列表推导式本质是for循环的压缩写法,但可读性取决于“是否聚焦单一目的”。别在一个推导式里又过滤又转换还调函数——拆成两步更清晰。
立即学习“Python免费学习笔记(深入)”;
- 需要同时获取索引和值?用enumerate(my_list),别写for i in range(len(my_list)):
- 去重且保持顺序:用list(dict.fromkeys(my_list)),比set()快,也不依赖第三方库
- 二维列表展平(如[[1,2],[3,4]]→[1,2,3,4]):用[item for row in matrix for item in row],不是[item for item in row for row in matrix]——顺序错了结果就乱
三者混合:字符串和列表互转要留心分隔符,数字进字符串别忘格式化
数字转字符串,别只记得str(3.1415)。需要补零、对齐、千分位,直接用f"{n:05d}"或f"{n:,}"。字符串转列表,list("abc")得['a','b','c'],但"a,b,c".split(",")才是你想要的分割。










