任务容量分配算法优化咨询:将数值分配至指定数量分组
更高效简洁的任务容量分配实现
嘿,你的实现逻辑是完全正确的,不过我们可以用更简洁、更Pythonic的方式来完成这个任务,同时保持甚至提升执行效率。
优化后的实现
首先,我们可以利用Python内置的divmod函数一次性获取商和余数,再通过列表乘法直接拼接结果,避免创建多个中间列表和额外的循环操作:
def capacity_distribution(task_size, people_size): """Distributes initial capacity to each person.""" div, remainder = divmod(task_size, people_size) # 先分配基础任务量,再分配多1个任务的部分,和原代码输出顺序完全一致 return [div] * (people_size - remainder) + [div + 1] * remainder
为什么这个实现更优?
- 更简洁:用
divmod替代分开计算//和%,一行代码拿到商和余数,减少重复逻辑,代码更紧凑。 - 更高效率:列表乘法是Python底层优化过的操作,比手动循环生成列表再
extend要快,避免了额外的内存操作和循环开销。 - 可读性更强:代码逻辑一目了然,直接体现了「大部分人拿基础量,余数部分的人多拿1个」的分配规则。
验证输出
测试你给出的几个用例,输出和原代码完全匹配:
capacity_distribution(6, 2)→[3, 3]capacity_distribution(7, 3)→[2, 2, 3]capacity_distribution(11, 3)→[3, 4, 4]capacity_distribution(18, 5)→[3, 3, 4, 4, 4]
如果任务分配的顺序不影响业务逻辑,也可以把[div+1] * remainder放在前面,结果同样正确,只是顺序不同而已。
内容的提问来源于stack exchange,提问作者Sijan Bhandari
相关产品推荐
相关产品推荐

