需求明确与区间定义
首先我们需要明确本次求和的过滤规则:给定一个包含任意整数的列表,我们需要累加列表中所有不在6和9双向区间内的数值。这里的双向区间指两个方向的范围:一是数值大于6且小于9的正向区间,二是数值大于9且小于6的反向区间,也就是所有满足(6 < num < 9) 或者 (9 < num < 6) 的数值都需要被跳过,不参与最终求和。

区间判断逻辑拆解
要正确判断数值是否在6和9的双向区间内,我们可以先梳理区间的数学表达:
- 正向区间6→9:数值严格大于6,同时严格小于9,也就是7、8两个整数
- 反向区间9→6:数值严格大于9,同时严格小于6,这个区间没有实际存在的整数,因为不存在同时大于9又小于6的数
因此实际过滤的逻辑可以简化为:如果数值是7或者8,就跳过不参与求和,其余数值都参与累加。不过为了适配更通用的双向区间场景,我们还是用通用的区间判断逻辑来实现,避免后续区间边界调整时需要修改核心逻辑。
通用实现思路
实现的核心步骤分为三步:
- 遍历输入的整数列表,逐个取出当前处理的数值
- 对每个数值判断是否在6和9的双向区间内,判断条件为(num - 6) * (num - 9) < 0,这个乘积小于0说明数值在6和9之间,无论正向还是反向区间都满足这个特征
- 如果不在区间内,就把数值累加到求和结果中,否则跳过该数值
判断条件的原理说明
我们用(num - 6) * (num - 9)的结果来判断数值位置:
- 当num大于9时,num-6为正,num-9为正,乘积为正,不在区间内
- 当num等于9时,num-9为0,乘积为0,不在区间内
- 当num在7、8时,num-6为正,num-9为负,乘积为负,在区间内,需要跳过
- 当num等于6时,num-6为0,乘积为0,不在区间内
- 当num小于6时,num-6为负,num-9为负,乘积为正,不在区间内
这个判断条件可以完美覆盖双向区间的所有情况,不需要额外区分正向和反向区间。
Python代码实现
下面是完整的Python实现代码,包含测试示例:
def sum_skip_6_9_interval(num_list):
total = 0
for num in num_list:
# 判断是否在6和9的双向区间内,乘积小于0说明在区间内
if (num - 6) * (num - 9) < 0:
continue
total += num
return total
# 测试示例
test_list = [1, 3, 6, 7, 8, 9, 10, 5, 12]
result = sum_skip_6_9_interval(test_list)
print(f"原始列表: {test_list}")
print(f"跳过6和9之间双向区间数值后的求和结果: {result}")
# 计算过程:1+3+6+9+10+5+12 = 46
代码说明
上述代码中,我们定义了sum_skip_6_9_interval函数,接收一个整数列表作为参数。函数内部初始化求和变量total为0,遍历列表每个元素,通过乘积判断是否在过滤区间内,如果在就跳过,否则累加到结果中。最后返回求和结果。测试示例中,7和8被跳过,其余数值累加得到46,符合预期结果。
扩展场景适配
如果后续需要调整过滤的区间边界,比如要跳过3和7之间的双向区间数值,只需要把判断条件中的6和9替换成3和7即可,核心逻辑不需要修改,通用性较强。如果列表中存在非整数类型的元素,可以在遍历时增加类型判断,跳过非整数元素避免报错。