Python 数字列表的相对频率
我需要找出一系列数字的相对频率。我几乎完成了,但我需要将给定的数字四舍五入为8位,如下所示:Python 数字列表的相对频率,python,python-2.7,Python,Python 2.7,我需要找出一系列数字的相对频率。我几乎完成了,但我需要将给定的数字四舍五入为8位,如下所示: def counts2frequencies(counts): freq = counts2frequencies(counts) Input argument: counts: list with numbers Output argument: freq: list with frequencies Example:
def counts2frequencies(counts):
freq = counts2frequencies(counts)
Input argument:
counts: list with numbers
Output argument:
freq: list with frequencies
Example:
counts2frequencies([8,2,3,10,5])
=>
[0.28571429, 0.07142857, 0.10714286, 0.35714286, 0.17857143]
我试过这个:
total = float(sum(counts))
freq = []
for count in counts:
freq.append(float(count/total))
return(freq)
结果是:
counts2frequencies([8,2,3,10,5])
Out[51]:
[0.2857142857142857,
0.07142857142857142,
0.10714285714285714,
0.35714285714285715,
0.17857142857142858]
我如何将列表中的数字四舍五入?函数
round()
不知何故不起作用。四舍五入到小数点后8位:
>>> l
[0.2857142857142857, 0.07142857142857142, 0.10714285714285714,
0.35714285714285715, 0.17857142857142858]
>>> lrounded = [ round(i, 8) for i in l ]
[0.28571429, 0.07142857, 0.10714286, 0.35714286, 0.17857143]
尽管如此,正确的方法是在打印时使用'{.08f}将它们四舍五入。格式(i)
:
你所说的不起作用是什么意思?你的数字看起来是正确的,为什么额外的数字是个问题呢?考虑到浮点数是一个近似值。你不能用浮点数来表示每个可能的实数,因为它们用二进制分数(0或1乘以1/2+0或1乘以1/4+0或1乘以1/8等)来近似数字。这是真的,但任务是,我们必须得到示例中所示的答案。这就是我想把数字四舍五入到8位数的原因。非常感谢你的回答。我用您的解决方案尝试了它,但它不起作用:该函数也应该直接适用于其他列表,因此,如果我使用其他数字给出counts2frequencies([8,2,3,10,5]),应该会出现一个包含已舍入数字的列表。所以我试着这样做:freqrounded=[freq中I的round(I,8)但是我得到的数字与之前的广告相同。那么,还有别的方法吗?还是我做错了?或者我应该改变我的整个功能,这样它才能正常工作?
>>> print('{:.08f}'.format(0.07142857142857142))
0.07142857
>>> print('{:.08f}'.format(0.07))
0.07000000