
在数据处理和业务逻辑中,我们经常需要在预先排序的数据集中查找与某个目标值相关的元素。具体来说,可能需要找到:
本教程将提供一个Python函数,通过遍历一个已排序的整数列表,实现上述逻辑,确保在各种场景下都能返回符合预期的结果。
要实现上述功能,我们可以采用线性遍历的方法。由于列表是已排序的,我们可以高效地进行比较,并在找到符合条件的元素时立即停止。
算法的主要步骤如下:
以下是根据上述逻辑实现的 Python 函数:
def find_relevant_quantity(target_val: int, sorted_list: list) -> int | None:
"""
在已排序的整数列表中查找与目标值相关的元素。
如果找到精确匹配,则返回该值。
如果目标值介于两个元素之间,则返回小于目标值的最大元素。
如果目标值大于列表中的所有元素,则返回列表中的最大元素。
如果目标值小于列表中的所有元素,则返回 0。
Args:
target_val (int): 需要查找的目标整数值。
sorted_list (list): 一个已按升序排序的整数列表。
Returns:
int | None: 找到的相关整数值,或在特定边界情况下返回 0。
如果列表为空,则返回 None。
"""
if not sorted_list:
return None # 处理空列表的情况
# 边界情况:如果目标值小于列表中的第一个元素
if target_val < sorted_list[0]:
return 0 # 根据问题描述,返回 0
output = None
for i in range(len(sorted_list)):
current_val = sorted_list[i]
# 情况 1: 找到精确匹配
if target_val == current_val:
output = current_val
break
# 情况 2: 目标值大于当前元素
elif target_val > current_val:
# 检查是否还有下一个元素
if i + 1 < len(sorted_list):
next_val = sorted_list[i + 1]
# 情况 2a: 目标值介于当前元素和下一个元素之间
if target_val < next_val:
output = current_val
break
# 情况 2b: 目标值大于或等于下一个元素,继续遍历
# (无需额外操作,循环将自然进行到下一个 i)
else:
# 情况 2c: 目标值大于列表中所有元素 (当前元素是最后一个)
output = current_val
break
# 情况 3: 目标值小于当前元素 (此情况在循环中通常意味着已经找到或会跳过)
# 实际上,如果执行到这里,说明 target_val < current_val,
# 且之前没有找到匹配或合适的“前一个”值。
# 由于我们已经处理了 target_val < sorted_list[0] 的情况,
# 并且在 target_val > current_val 时会break或继续,
# 这个 'else' 分支在当前逻辑下通常不会被实际执行到并赋值,
# 因为如果 target_val < current_val,且 target_val > previous_val,
# 那么在 previous_val 的迭代中就应该已经处理了。
# 这里保留一个注释,说明其逻辑含义,但实际代码中可以省略此处的 `else` 块。
# else:
# pass # 目标值小于当前元素,且不是第一个元素,这意味着它应该在之前的迭代中被处理
return output以上就是优化排序列表查找:获取目标值的前一个或精确匹配值的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号