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

如何去除列表中顺序不同的重复勾股三元组?

解决勾股三元组重复输出的问题

你的代码会生成顺序不同的同一组勾股三元组,核心原因是i和j的循环范围重叠,导致(i,j,k)和(j,i,k)都会被遍历到。下面提供两种简单的解决思路:

思路1:从循环源头避免重复

直接调整循环条件,让j从i+1开始,保证i < j,同时利用勾股定理的特性(k必然大于j,因为i²+j²=k²且i>0),可以进一步优化计算逻辑,减少不必要的循环:

SpecialTriangles = []

for i in range(1, 15):  # 从1开始,直接排除0的情况
    for j in range(i + 1, 15):  # j始终大于i,避免生成(i,j)和(j,i)的重复组合
        k_squared = i**2 + j**2
        k = int(k_squared ** 0.5)
        # 检查k是否在范围内且是整数(避免平方根取整后的误差)
        if k < 15 and k**2 == k_squared:
            SpecialTriangles.append([i, j, k])

print(SpecialTriangles)

运行后直接输出升序的唯一三元组:

[[3, 4, 5], [5, 12, 13], [6, 8, 10]]

思路2:排序后去重(兼容原有代码结构)

如果不想大幅修改原有循环逻辑,可以在添加三元组前先排序,再检查是否已经存在于列表中,避免重复添加:

SpecialTriangles = []

for i in range(15):
    for j in range(15):
        for k in range(15):
            if i**2 + j**2 == k**2:
                # 简化原有多条件判断,直接排除包含0的无效三元组
                if i != 0 and j != 0 and k != 0:
                    sorted_triple = sorted([i, j, k])
                    if sorted_triple not in SpecialTriangles:
                        SpecialTriangles.append(sorted_triple)

print(SpecialTriangles)

这种方法的好处是不用调整循环结构,但效率略低于第一种(因为会先生成重复组合再去重)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:35:36