如何优化将整数按指定区间转换为分箱的Python函数?
优化整数分箱的实现方案
你需要实现的是将整数num按指定区间分箱,原代码通过多分支判断实现了需求,但可以通过更简洁、可扩展的方式重构。
优化后的实现代码
def create_bins(num): """Create Bins as per given intervals.""" # 定义各固定区间的容量:对应[1,200)、[200,400)、[400,800)、[800,1200)的区间长度 bins_capacities = [199, 200, 400, 400] remaining = num result = [] for capacity in bins_capacities: if remaining <= 0: break # 取当前剩余数值和区间容量的较小值作为分箱值 bin_value = min(remaining, capacity) result.append(bin_value) remaining -= bin_value # 如果还有剩余,说明num超过1200,加入最后一个分箱 if remaining > 0: result.append(remaining) return result
代码逻辑说明
- 定义固定区间容量:
bins_capacities列表直接对应每个前置区间的最大可容纳数值,比如199是[1,200)的区间长度(200-1),200是[200,400)的区间长度(400-200),以此类推。 - 循环处理分箱:遍历每个固定容量,每次取当前剩余数值和区间容量的最小值加入结果,同时更新剩余数值,剩余为0时提前终止循环,避免无效遍历。
- 处理超区间情况:如果遍历完所有固定区间后还有剩余数值,说明
num大于1200,直接将剩余值作为最后一个分箱加入结果。
测试验证
- 输入
create_bins(1041):剩余数值依次减去199、200、400后,剩余242,结果为[199, 200, 400, 242],符合预期。 - 输入
create_bins(150):直接加入150,返回[150]。 - 输入
create_bins(300):加入199后剩余101,返回[199, 101]。 - 输入
create_bins(1300):遍历完所有固定容量后剩余101,返回[199, 200, 400, 400, 101]。
优化优势
- 简洁易读:去掉了冗余的多分支判断,逻辑更统一。
- 扩展性强:如果后续需要调整区间范围或新增区间,只需修改
bins_capacities列表,无需修改大量条件分支。 - 鲁棒性高:避免了因分支遗漏导致的逻辑错误,减少维护成本。
内容的提问来源于stack exchange,提问作者Arun Kumar Khattri
相关产品推荐
相关产品推荐

