You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表三数之和函数语义错误求助:返回结果不符合预期

排查sum_tri函数的语义错误:为什么测试用例返回False?

我一眼就看到了问题所在——你的函数过早返回了False,导致根本没机会检查到符合条件的三元组!

核心问题分析

看你的代码:

def sum_tri(a, x):
    for i in range(len(a) - 1):
        for j in range(i, len(a)):
            for k in range(j, len(a)):
                if a[i] + a[j] + a[k] == x:
                    return True
                else:
                    return False

在第一次进入三层循环时,比如你的测试用例里i=0, j=0, k=0,计算的是1+1+1=3,不等于103,这时else分支直接触发return False,函数直接终止了!后面的5、8、90这些元素的组合根本没机会被检查到。

简单说:你只检查了第一个可能的三元组,不符合就直接放弃了,完全没遍历完所有可能的组合。

修正后的代码

把return False移到所有循环的外面,只有当遍历完所有三元组都没找到符合条件的,才返回False:

def sum_tri(a, x):
    # 遍历所有i<=j<=k的三元组组合(允许重复使用同一位置元素)
    for i in range(len(a)):
        for j in range(i, len(a)):
            for k in range(j, len(a)):
                if a[i] + a[j] + a[k] == x:
                    return True
    # 所有组合都检查完毕,没有符合条件的才返回False
    return False

如果你的需求是只能使用数组中不同位置的元素(即i<j<k,不重复使用同一个元素),可以优化循环范围减少冗余检查:

def sum_tri(a, x):
    n = len(a)
    for i in range(n - 2):
        for j in range(i + 1, n - 1):
            for k in range(j + 1, n):
                if a[i] + a[j] + a[k] == x:
                    return True
    return False

测试验证

调用sum_tri([1, 5, 8, 2, 6, 55, 90], 103)时,修正后的函数会找到5+8+90=103这个组合,正确返回True。

进阶优化(可选)

当前的三重循环时间复杂度是O(n³),如果数组规模较大,效率会很低。可以先对数组排序,然后用双指针法把时间复杂度降到O(n²),比如:

def sum_tri(a, x):
    a.sort()
    n = len(a)
    for i in range(n - 2):
        left = i + 1
        right = n - 1
        while left < right:
            current_sum = a[i] + a[left] + a[right]
            if current_sum == x:
                return True
            elif current_sum < x:
                left += 1
            else:
                right -= 1
    return False

这个版本效率更高,适合处理大数组。

内容的提问来源于stack exchange,提问作者user9258239

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:06:30