Python 数字列表的相对频率

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:

我需要找出一系列数字的相对频率。我几乎完成了,但我需要将给定的数字四舍五入为8位,如下所示:

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