如何实现列表内数值均衡分配 让所有元素值完全相等
数值列表均衡分配实现方案
核心逻辑
这个需求的本质是在不改变列表内数值总和的前提下,对所有元素做均等分配,不需要模拟「从大数扣减、补到小数」的逐次操作,直接基于算术平均值生成结果即可,逻辑步骤如下:
- 计算输入数值列表的所有元素之和
- 统计列表内的元素总个数
- 用总和除以元素个数得到目标平均值,这个值就是所有元素调整后的最终值
- 生成和原列表长度一致的新列表,每个位置填充计算得到的平均值即可
代码实现(Python)
def balance_numeric_list(input_list: list[int | float]) -> list[int | float]: list_length = len(input_list) # 处理空列表边界情况 if list_length == 0: return [] total_sum = sum(input_list) avg_value = total_sum / list_length # 若业务要求返回整数结果,可替换为以下整数逻辑,处理除不尽的余数 # avg_base = total_sum // list_length # remainder = total_sum % list_length # res = [avg_base] * list_length # # 将余数依次分摊到前remainder个元素上,保证总和不变 # for idx in range(remainder): # res[idx] += 1 # return res return [avg_value] * list_length # 测试用例验证 if __name__ == "__main__": # 示例1 输入[5,10,6] print(balance_numeric_list([5, 10, 6])) # 输出 [7.0, 7.0, 7.0],和预期结果一致 # 示例2 输入[2, 14, 275, 10000, 1, 45] print(balance_numeric_list([2, 14, 275, 10000, 1, 45]))
注意事项
- 该实现时间复杂度为O(n),性能远高于模拟逐次扣减补值的逻辑,适合处理大长度的数值列表
- 如果业务场景要求必须保留整数、不允许出现浮点值,直接使用代码中注释的整数实现逻辑即可,余数分摊规则可以根据业务要求调整,比如优先补到原数值更小的元素上
- 必须先判断列表长度,避免空列表触发除零错误
内容的提问来源于stack exchange,提问作者Logono
相关产品推荐
相关产品推荐

