在Python中将浮点数列表转换为字符串

12

我有一个Python的浮点数列表,当我将其转换为字符串时,我得到以下结果

[1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]

这些浮点数在创建时保留了小数点后两位(我想是这样的),接着我使用了
str(mylist)

如何获得一个小数点后有两位数字的字符串?

======================

让我更具体地说明,我希望最终结果是一个字符串,并且我想保留分隔符:

"[1883.95, 1878.33, 1869.43, 1863.40]"

我之后需要进行一些字符串操作。例如:+="!\t!"

在@senshin的启发下,以下代码可以工作,但我认为有更好的方法。

msg = "["

for x in mylist:
    msg += '{:.2f}'.format(x)+','

msg = msg[0:len(msg)-1]
msg+="]"
print msg
6个回答

15
使用字符串格式化来获取所需的小数位数。
>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]
>>> ['{:.2f}'.format(x) for x in nums]
['1883.95', '1878.33', '1869.43', '1863.40']

格式化字符串{:.2f}表示“打印带有小数点后两位(.2)的定点数(f)”。str.format将自动正确地舍入数字(假设您首先输入了带有两位小数的数字,这种情况下浮点误差不足以影响舍入)。


可以,我需要得到类似于"[1883.95, 1878.33, 1869.43, 1863.40]"的东西。这样我之后才能进行一些字符串操作。谢谢! - Niebieski
@Niebieski 你想要整个列表的字符串表示吗?我非常怀疑这是否是你实际想要的,但你可以在列表上调用 str() 来获得类似的结果。 - senshin
我想进行 += “!\t!”,或类似的操作。 - Niebieski
@Niebieski 但是,你为什么要这样做呢?为什么不直接对每个数字进行字符串操作呢? - senshin
我正在生成此列表的电子邮件摘要,因此需要最终结果为字符串,并且我想保留分隔符。我正在寻找一种优雅的方法来实现这一点。我认为str(mylist)会做到这一点,但它会给出令人讨厌的额外数字。 - Niebieski

3
如果您想保持完整的精度,从句法上来看,最简单/清晰的方式似乎是:
mylist = list(map(str, mylist))

2
map(lambda n: '%.2f'%n, [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001])

map()函数会对第二个参数传入的列表/可迭代对象中的每个元素,都调用第一个参数所传入的可调用对象。


1
摆脱 ' 标记:
>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]
>>> '[{:s}]'.format(', '.join(['{:.2f}'.format(x) for x in nums]))
'[1883.95, 1878.33, 1869.43, 1863.40]'
  • ['{:.2f}'.format(x) for x in nums] 创建一个字符串列表,就像接受的答案中一样。
  • ', '.join([list]) 返回一个字符串,其中在列表元素之间插入', '。
  • '[{:s}]'.format(joined_string) 添加方括号。

0
str([round(i, 2) for i in mylist])

0
使用numpy,您可以执行以下操作: < p > < code > np.array2string(np.asarray(mylist), precision=2, separator=', ')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接