numpy.format似乎仅舍入为整数

时间:2018-10-29 17:14:58

标签: python numpy

im试图格式化此列表,以使其保持科学计数形式,但保留小数位数较少。但是下面的脚本似乎只是将所有内容四舍五入到最接近的整数

import numpy
A=[9.380726789802627885e-23, 9.764534271051429814448e-23, 1.0168775777415136679e-22, 1.0573873175565650064e-22, 1.098630609702e-2, 1.14060439559859689e-22]
B=[]
for i in range(len(A)):
    c=numpy.format_float_scientific(i, precision=5)
    B.append(c)
print(B)

B打印为

['0.e+00', '1.e+00', '2.e+00', '3.e+00', '4.e+00', '5.e+00']

我误解了“精度”吗?

2 个答案:

答案 0 :(得分:1)

for i in A:

修复了您的代码,但随后您应该将i重命名为更有意义的名称。

您的range(len(A))实际上是range(6),它等效于[0, 1, 2, 3, 4, 5](在Python 3.x中不是完全),后者是代码输出的来源。

也许您忘记写A[i]而不是i作为format_float_scientific的第一个参数。但这本来是遍历列表的低效率方法。

获得列表结果的最“ Python式”方法是使用列表理解,但是对理解的理解并不总是那么容易,并且您可以在没有它们的情况下生存一段时间。

答案 1 :(得分:0)

您的循环不正确。在您的代码中,它应该类似于

import numpy
A=[9.380726789802627885e-23, 9.764534271051429814448e-23, 
   1.0168775777415136679e-22, 1.0573873175565650064e-22, 
   1.098630609702e-2, 1.14060439559859689e-22]
B=[]
for i in A:
    c=numpy.format_float_scientific(i, precision=5)
    B.append(c)
print(B)

您还可以利用列表理解功能获得更干净的解决方案:

B = [numpy.format_float_scientific(i, precision=5) for i in A]

两者都会为您提供所需的输出。