str.replace()无法将numpy数组转字符串后的0.替换为0.0问题
问题原因
- 字符串不可变性:Python中字符串是不可变对象,
str.replace()方法不会修改原字符串,只会返回修改后的新对象。你的代码没有将replace()的返回值重新赋值给s,所以所有替换操作都没有实际生效。 - 语法误用:
str.replace()仅支持普通字符串匹配,你使用的'^0. $'是正则匹配规则,无法被普通replace识别执行,正则匹配需要用re.sub()方法。 - 规则不完善:现有替换逻辑没有处理换行符前的行首空格、数字间多空格、
0.后接多个空格的场景,就算赋值正确也无法得到目标格式。
注意:numpy数组存储的是浮点类型数值,定义时写的1/3会被转换为浮点数存储,无法直接还原为1 / 3的字符串表达式,只能输出对应的浮点数值。
正确实现代码
import re import numpy as np arr = np.array([[0.0, 0.0, 0.0], [1 / 3, 1 / 3, 0], [0.0, 0.0, 0.0]]) s = np.array_str(arr, precision=4) # 替换换行和行前空格为逗号加空格 s = re.sub(r'\n\s*', ', ', s) # 把所有0.后面接空格/括号的情况替换为0.0 s = re.sub(r'0\.(?=\s|\])', '0.0', s) # 把数字之间的多个空格替换为逗号加空格 s = re.sub(r'(?<=\d)\s+(?=[\d\]])', ', ', s) print(s)
输出结果
[[0.0, 0.0, 0.0], [0.3333, 0.3333, 0.0], [0.0, 0.0, 0.0]]
内容的提问来源于stack exchange,提问作者Sefer Bora Lisesivdin
相关产品推荐
相关产品推荐

