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

Python阈值求和面试题:求电梯按顺序载客所需运行趟数的简洁写法

电梯运行趟数计算问题

有位朋友在应聘初级Python开发岗位的面试中,遇到了如下问题:

某栋大楼配备1部电梯,员工按固定顺序排队搭乘电梯上行,电梯设有最大载重上限。已知所有乘客的体重按排队顺序存放在有序列表中,请问电梯总共需要运行多少趟?

现有如下C风格的循环实现可以正确满足需求,但写法偏繁琐,能否给出更简洁的实现方式,最好支持一行代码完成?

#!/usr/bin/env python3

MAX_MASS = 280  # 单位:kg

def how_many(masses):
    trips = 0
    total_mass = 0
    for m in masses:
        # 电梯超重,发走当前趟次
        if total_mass + m > MAX_MASS:
            trips = trips + 1
            total_mass = 0

        total_mass = total_mass + m

    # 剩余不足载重的乘客也需要发一趟
    if total_mass > 0:
        trips = trips + 1

    return trips


if __name__ == '__main__':
    passangers = [19, 22, 34, 33, 82, 91, 77, 31, 87]
    trips = how_many(passangers)
    print(trips)

解决方案

可以借助functools.reduce维护遍历过程中的状态,实现一行逻辑完成计算,和原实现逻辑完全对齐:

from functools import reduce
MAX_MASS = 280

def how_many(masses):
    return reduce(lambda acc, m: (acc[0]+1, m) if acc[1] + m > MAX_MASS else (acc[0], acc[1]+m), masses, (0, 0))[0] + (1 if masses else 0)

逻辑说明

  • reduce的累加器用二元组(已发走的趟数, 当前电梯内总载重)存储中间状态,初始值为(0, 0)
  • 遍历每个乘客体重时,如果加入当前乘客后超重,就将已发趟数+1,当前载重重置为当前乘客的体重;否则直接累加当前载重
  • 遍历结束后,如果输入的乘客列表非空,最后留在电梯里的乘客还需要额外加一趟,空列表直接返回0
  • 完全兼容原实现的边界处理逻辑:比如单个乘客体重超过载重上限时,会正确返回2趟,空输入返回0

测试样例[19, 22, 34, 33, 82, 91, 77, 31, 87]运行结果为3,和原实现输出一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:04