我有一个由浮点值组成的列表,但它们太详细而无法继续.我知道我们可以通过使用("%.f" % variable)运算符缩短它们,例如:
result = [359.70000000000005]
result = "%.2f" % result
result = [359.70]
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在不使用迭代器的情况下将值列表转换为舍入的等价物.我尝试了一些东西,但它抛出了TypeError:
list = [0.30000000000000004, 0.5, 0.20000000000000001]
list = "%.2f" % list
TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)
我怎样才能提供一个干净的清单,如:
list = [0.30, 0.5, 0.20]
Run Code Online (Sandbox Code Playgroud)
eum*_*iro 72
"%.2f"没有返回干净的浮子.它返回一个表示此float 的字符串,带有两位小数.
my_list = [0.30000000000000004, 0.5, 0.20000000000000001]
my_formatted_list = [ '%.2f' % elem for elem in my_list ]
Run Code Online (Sandbox Code Playgroud)
收益:
['0.30', '0.50', '0.20']
Run Code Online (Sandbox Code Playgroud)
另外,不要调用你的变量list.这是列表创建的保留字.例如,使用其他名称my_list.
如果你想获得[0.30, 0.5, 0.20](或至少是最接近的浮动),你可以试试这个:
my_rounded_list = [ round(elem, 2) for elem in my_list ]
Run Code Online (Sandbox Code Playgroud)
收益:
[0.29999999999999999, 0.5, 0.20000000000000001]
Run Code Online (Sandbox Code Playgroud)
joh*_*jik 15
如果你真的想要一个无迭代器的解决方案,你可以使用numpy及其数组轮函数.
import numpy as np
myList = list(np.around(np.array(myList),2))
Run Code Online (Sandbox Code Playgroud)
mar*_*eau 10
您可能希望查看Python的decimal模块,它可以使用浮点数并使用它们更直观地进行算术运算.以下是使用它"清理"列表值的一种方法的简单示例:
>>> from decimal import *
>>> mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
>>> getcontext().prec = 2
>>> ["%.2f" % e for e in mylist]
['0.30', '0.50', '0.20']
>>> [Decimal("%.2f" % e) for e in mylist]
[Decimal('0.30'), Decimal('0.50'), Decimal('0.20')]
>>> data = [float(Decimal("%.2f" % e)) for e in mylist]
>>> data
[0.3, 0.5, 0.2]
Run Code Online (Sandbox Code Playgroud)
小智 5
mylist = [0.30000000000000004, 0.5, 0.20000000000000001]
myRoundedList = [round(x,2) for x in mylist]
# [0.3, 0.5, 0.2]
Run Code Online (Sandbox Code Playgroud)
my_list = [0.2111111111, 0.5, 0.3777777777]
my_list_rounded = list(map(lambda x: round(x, ndigits=2), my_list))
my_list_rounded
Out[3]: [0.21, 0.5, 0.38]
Run Code Online (Sandbox Code Playgroud)
partial或者,您还可以使用functools模块创建一个命名函数,用于四舍五入到特定数字,以处理高阶函数:
from functools import partial
my_list = [0.2111111111, 0.5, 0.3777777777]
round_2digits = partial(round, ndigits=2)
my_list_rounded = list(map(round_2digits, my_list))
my_list_rounded
Out[6]: [0.21, 0.5, 0.38]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88278 次 |
| 最近记录: |