如何计算元组各元素的最小差值并解决遍历的索引越界问题
问题原因
- 索引越界根源:你在循环中访问了
novo_t[i + 2],循环范围是range(len(novo_t) - 1),当i取最大值len(novo_t)-2时,i+2等于元组长度,超出了元组索引的合法范围(元组索引从0开始,最大值为len(novo_t)-1)。 - 逻辑冗余问题:排序后的序列求最小相邻差值,仅需要依次计算相邻两个元素的差值、记录最小值即可,不需要同时对比三组元素,你代码里的counter变量和循环变量i功能重复,逻辑存在错误。
修正后代码
def seg(t): # 直接将元组按降序排序 novo_t = sorted(t, reverse=True) # 初始化最小差值为第一个相邻对的差值 min_diff = novo_t[0] - novo_t[1] # 遍历所有相邻元素对 for i in range(len(novo_t) - 1): current_diff = novo_t[i] - novo_t[i + 1] # 如果当前差值更小,更新最小差值 if current_diff < min_diff: min_diff = current_diff return min_diff
效果验证
输入测试用例seg((2223,424,1316,99)),执行后返回值为325,符合预期结果。
内容的提问来源于stack exchange,提问作者João
相关产品推荐
相关产品推荐

