Python 计算向上或向下舍入数组中的值以使平均值的影响最小的点的算法

Python 计算向上或向下舍入数组中的值以使平均值的影响最小的点的算法,python,arrays,algorithm,search,mean,Python,Arrays,Algorithm,Search,Mean,考虑0和1之间的值的随机数组,例如: [0.1,0.2,0.8,0.9] 是否有方法计算值应向下或向上舍入到整数的点,以匹配最接近的未舍入数组的平均值?(在上述情况下,这将是平均值,但这纯粹是巧合) 还是只是试错? python中的即时消息编码 谢谢你的帮助把它们加起来,然后四舍五入。这就是你想要多少个1。轮,这样你就能得到那么多的1 def rounding_point(l): # if the input is sorted, you don't need the following

考虑0和1之间的值的随机数组,例如:

[0.1,0.2,0.8,0.9]

是否有方法计算值应向下或向上舍入到整数的点,以匹配最接近的未舍入数组的平均值?(在上述情况下,这将是平均值,但这纯粹是巧合)

还是只是试错? python中的即时消息编码


谢谢你的帮助

把它们加起来,然后四舍五入。这就是你想要多少个1。轮,这样你就能得到那么多的1

def rounding_point(l):
    # if the input is sorted, you don't need the following line
    l = sorted(l)
    ones_needed = int(round(sum(l)))
    # this may require adjustment if there are duplicates in the input
    return 1.0 if ones_needed == len(l) else l[-ones_needed]

如果对列表进行排序的成本太高,可以使用类似quickselect的方法。Python没有内置的quickselect函数,因此,除非您的输入足够大,quickselect的渐进优势超过了高度优化的C排序算法的常数因子优势,否则不要麻烦了。

将它们相加,然后对总和进行四舍五入。这就是你想要多少个1。轮,这样你就能得到那么多的1

def rounding_point(l):
    # if the input is sorted, you don't need the following line
    l = sorted(l)
    ones_needed = int(round(sum(l)))
    # this may require adjustment if there are duplicates in the input
    return 1.0 if ones_needed == len(l) else l[-ones_needed]

如果对列表进行排序的成本太高,可以使用类似quickselect的方法。Python没有内置的quickselect函数,因此,除非您的输入足够大,quickselect的渐进优势超过了高度优化的C排序算法的常数因子优势,否则不要麻烦了。

如果您还发布了所需的输出(只是为了让事情变得更明显),这将非常有用。例如,在本例中,您希望输出为[0.0,0.0,1.0,1.0]。如果您还发布了所需的输出(只是为了让事情更加明显),这将非常有用。例如,在本例中,您希望输出为[0.0,0.0,1.0,1.0]。
l[-ones\u needed]
将引发TypeError,因为
ones\u needed
不是整数,因此不能用作索引。编辑:另一个小问题是,您可能希望从函数返回一些内容:)
l[-ones\u needed]
将引发TypeError,因为
ones\u needed
不是整数,因此不能用作索引。编辑:另一个小问题是您可能希望从函数返回一些内容:)