Python整数与有序整数列表匹配逻辑异常修复需求
整数与有序列表的匹配逻辑实现优化
需求说明
给定一个整数和一个升序排列的整数列表,需按照以下规则输出结果:
- 若整数等于列表中的某个元素,输出该整数自身
- 若整数介于列表中相邻两个元素之间(大于前一个、小于后一个),输出前一个元素
- 若整数大于列表所有元素,输出列表最后一个元素
- 若整数小于列表第一个元素,输出列表第一个元素
原代码的问题
原代码存在多处逻辑漏洞,导致无法稳定输出:
- 未处理整数小于列表第一个元素的场景,此时
output会保持初始值None - 遍历逻辑错误:当整数大于列表第一个元素时(比如
quantity=5大于q_list[0]=1),由于i=0不满足i>0的条件,无法赋值正确结果 - 未处理整数大于列表所有元素的场景,遍历结束后
output不会被设置为最后一个元素 - 存在逻辑覆盖不全的情况,部分场景下
output可能始终为None
修复后的实现
以下是覆盖所有场景的稳定实现,封装为函数便于复用:
def find_matching_value(quantity, q_list): # 处理小于等于第一个元素的边界情况 if quantity <= q_list[0]: return q_list[0] # 处理大于等于最后一个元素的边界情况 if quantity >= q_list[-1]: return q_list[-1] # 遍历中间元素,寻找匹配区间 for i in range(1, len(q_list)): if quantity == q_list[i]: return quantity if q_list[i-1] < quantity < q_list[i]: return q_list[i-1] # 兜底返回(理论上不会触发) return q_list[-1] # 测试示例 target_list = [1, 10, 25, 50, 100, 300, 500] print(f"quantity=5 → output={find_matching_value(5, target_list)}") print(f"quantity=11 → output={find_matching_value(11, target_list)}") print(f"quantity=1 → output={find_matching_value(1, target_list)}") print(f"quantity=10 → output={find_matching_value(10, target_list)}") print(f"quantity=505 → output={find_matching_value(505, target_list)}")
输出验证
运行上述代码,输出完全符合预期:
quantity=5 → output=1 quantity=11 → output=10 quantity=1 → output=1 quantity=10 → output=10 quantity=505 → output=500
内容的提问来源于stack exchange,提问作者R. Geraci
相关产品推荐
相关产品推荐

