You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更优雅的方式实现基于平均值的列表数值分配逻辑?

优化实现方案

可以用while循环结合状态标记来实现,避免重复嵌套for循环,同时确保迭代直到没有符合条件的元素为止。核心思路是:每次遍历未分配的元素,标记本轮是否有元素被选中,若有则更新剩余数值和剩余元素数量,重新计算平均值后继续循环;若本轮没有元素被选中,就停止迭代,将剩余数值平均分配给未填充的位置。

original_number = 400
list_to_distribute = [7, 50, 81, 109, 110, 95, 95, 75, 25]
remaining = original_number
result = [None] * len(list_to_distribute)
count_remaining = len(result)

while True:
    updated = False
    avg = remaining / count_remaining
    # 遍历所有未分配的元素
    for i in range(len(result)):
        if result[i] is None and avg > list_to_distribute[i]:
            result[i] = list_to_distribute[i]
            remaining -= result[i]
            count_remaining -= 1
            updated = True
            # 剩余元素为0时直接跳出,避免除以0
            if count_remaining == 0:
                break
    # 如果本轮没有元素被更新,结束循环
    if not updated or count_remaining == 0:
        break

# 填充剩余位置的平均值
if count_remaining > 0:
    final_avg = remaining / count_remaining
    for i in range(len(result)):
        if result[i] is None:
            result[i] = final_avg

print(result)

代码说明

  • 用updated标记本轮是否有元素被选中,精准控制while循环的终止时机
  • 每次循环重新计算当前平均值,仅处理未分配(result[i] is None)的元素,避免重复判断已处理项
  • 当剩余元素为0时直接终止循环,避免后续出现除以0的错误
  • 最后统一填充剩余位置的平均值,逻辑更清晰,也减少了循环内的冗余计算

内容的提问来源于stack exchange,提问作者Victor Sanz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:50:03