0

我进行了研究并进行了一些改进,非常接近解决这个问题,但现在我被卡住了,需要帮助。

任务:将字符串浮点数列表转换为带 2 个小数点的浮点数

原名单:

mylist = ['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']

目标

mylist = [17.21, 33.40, 24.39, 3.48, 1.02, 0.61, 18.03, 1.84]

我的脚本尝试

mylisttwo = map(float, mylist)

它给了我这个

[17.21, 33.4, 24.39, 3.48, 1.02, 0.60999999999999999, 18.03, 1.84]

然后我想 id 格式化它

floatlist = []
for item in mylisttwo:
    floatlist.append("{0:.2f}".format(item))

但这又给了我一个字符串浮动列表!啊啊啊

['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']

我在这里做错了什么?

谢谢

4

4 回答 4

5

[round(float(i), 2) for i in mylist]

这应该有效。格式用于在其他字符串中插入字符串,如"Hello, {}! What is your favourite {}?".format("Jim", "colour").

如果您希望数字仅存在 2 个小数位,您可以使用 decimal 模块。

于 2013-08-09T14:45:39.703 回答
1

你问了一个问题“我在这里做错了什么?”。我认为,您做错了什么是作为参数传递给:

floatlist.append()

这:

"{0:.2f}".format(item)

str 类的 Format 方法只是返回格式化的字符串,并且您期望得到固定的两位小数点浮点数。Float 没有提供这样的选项。user2387370是对的,你应该使用十进制。

于 2013-08-09T16:19:22.787 回答
0

解决方案类似于numpy

import numpy as np

np.round( [float(i) for i in mylist], 2)

返回:

array([ 17.21, 33.4 , 24.39, 3.48, 1.02, 0.61, 18.03, 1.84])

于 2016-09-17T16:45:19.543 回答
0

我编写了以下代码,它获取您的原始列表并将其映射到您的“目标”:

from decimal import Decimal

def str_to_float_with_precision(item):
    precision = 2
    return float(Decimal(item, precision))

items = ['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']
floated_items = map(str_to_float_with_precision, items)
print floated_items

结果:

[17.21, 33.4, 24.39, 3.48, 1.02, 0.61, 18.03, 1.84]
于 2017-07-22T18:02:39.887 回答