Python如何实现返回列表中相邻差值最大的两个数字?
实现方案
你可以通过以下两种方式完成需求:
方式1:复用现有partition函数
你的partition函数已经可以返回所有相邻元素的差值列表,只需要找到最大差值对应的索引,再从原列表取出对应位置的两个元素即可:
def partition(lst: list): f = [] for i in range(len(lst)): if i < len(lst)-1: diff = lst[i+1] - lst[i] f.append(diff) else: return f def grouping(lst: list): diff_list = partition(lst) max_diff_index = diff_list.index(max(diff_list)) return [lst[max_diff_index], lst[max_diff_index + 1]] # 测试代码 print(grouping([1,3,5,7,12,14,15]))
运行后输出结果为 [7, 12],符合预期。如果列表中存在多个相同的最大相邻差值,该实现会返回第一个出现最大差值的元素对。
方式2:单次遍历实现(空间复杂度更低)
不需要额外存储所有差值,遍历过程中同步记录当前最大差值和对应的元素对即可,空间复杂度为O(1):
def grouping(lst: list): # 处理边界情况:列表元素不足2个时直接返回空 if len(lst) < 2: return [] max_diff = -1 result_pair = [] for i in range(len(lst)-1): current_diff = lst[i+1] - lst[i] if current_diff > max_diff: max_diff = current_diff result_pair = [lst[i], lst[i+1]] return result_pair # 测试代码 print(grouping([1,3,5,7,12,14,15]))
如果你的输入列表不是升序排列,需要计算绝对差值的话,把current_diff = lst[i+1] - lst[i]修改为current_diff = abs(lst[i+1] - lst[i])即可。
内容的提问来源于stack exchange,提问作者Bruffff
相关产品推荐
相关产品推荐

