Python如何判断数值处于有序列表的哪两个相邻元素之间
无导入模块的Python实现方案
实现思路
因为输入是有序列表,我们可以直接遍历相邻元素对匹配,超长列表也可以用二分查找优化性能,两种方案都不需要导入任何模块:
- 首先做边界校验:如果待查询值小于列表首个元素,或大于等于列表末尾元素,说明不在任何相邻元素区间内,可返回空值
- 匹配规则可自行调整,默认采用左闭右开规则(即
左元素 ≤ 待查询值 < 右元素视为匹配成功)
基础遍历实现(适合短列表)
def find_neighbor_pair(sorted_list, target): # 边界校验 if target < sorted_list[0] or target >= sorted_list[-1]: return None # 遍历所有相邻元素对 for idx in range(len(sorted_list) - 1): left_val = sorted_list[idx] right_val = sorted_list[idx + 1] if left_val <= target < right_val: return (left_val, right_val) return None # 测试用例 sorted_arr = [1, 4, 8, 12, 16, 20] target = 3 print(find_neighbor_pair(sorted_arr, target)) # 输出:(1, 4)
二分查找实现(适合超长列表,时间复杂度O(logn))
def find_neighbor_pair_binary(sorted_list, target): if target < sorted_list[0] or target >= sorted_list[-1]: return None low = 0 high = len(sorted_list) - 1 while low <= high: mid = (low + high) // 2 if sorted_list[mid] == target: return (sorted_list[mid], sorted_list[mid + 1]) elif sorted_list[mid] < target: low = mid + 1 else: high = mid - 1 return (sorted_list[high], sorted_list[low]) # 测试用例 sorted_arr = [1, 4, 8, 12, 16, 20] target = 3 print(find_neighbor_pair_binary(sorted_arr, target)) # 输出:(1, 4)
可以根据实际需求调整区间判断规则,比如改成左开右闭只需将判断条件改为
left_val < target <= right_val即可。
内容的提问来源于stack exchange,提问作者DenseMage
相关产品推荐
相关产品推荐

