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

如何用Python判断列表元素是否满足a²+b²=c²的勾股定理条件

验证列表中的勾股数组合

没问题,我来帮你搞定这个问题!要验证列表里是否存在三个元素满足 a² + b² = c²,核心就是遍历所有可能的元素组合并检查条件。下面给你几种实用的实现方式:

1. 基础三重循环法(直观易懂)

这是最直接的思路,遍历列表里所有可能的a、b、c组合,逐个验证条件:

original_list = [8,5,73,3,34,4,23,73]

# 遍历所有三元组组合
for a in original_list:
    for b in original_list:
        for c in original_list:
            if a**2 + b**2 == c**2:
                print(f"找到满足条件的组合:{a}² + {b}² = {c}²")

优点:逻辑简单,新手也能快速理解;缺点:会输出重复组合(比如3²+4²=5²和4²+3²=5²都会被打印),而且效率较低,因为做了很多重复检查。

2. 优化版:利用集合快速查找

我们可以先把列表转成集合(查找元素是否存在的速度更快),然后只遍历a和b,计算出对应的c后,直接检查c是否在集合里:

import math

original_list = [8,5,73,3,34,4,23,73]
num_set = set(original_list)  # 转成集合提升查找效率
found_combinations = set()  # 用来存去重后的组合

for a in original_list:
    for b in original_list:
        c_squared = a**2 + b**2
        c = math.isqrt(c_squared)  # 取整数平方根(Python 3.8+支持)
        # 验证c的平方等于a²+b²,且c在列表中
        if c * c == c_squared and c in num_set:
            # 把组合按从小到大排序,避免重复记录
            sorted_comb = tuple(sorted((a, b, c)))
            found_combinations.add(sorted_comb)

# 输出所有唯一的满足条件的组合
for comb in found_combinations:
    print(f"{comb[0]}² + {comb[1]}² = {comb[2]}²")

运行这段代码,你只会得到一次3² + 4² = 5²的输出,不会有重复。这里用到math.isqrt是为了确保我们得到的是整数平方根,再通过c*c == c_squared验证这个平方根是准确的(避免像√2这样的无理数情况)。

3. 高效判断是否存在(无需列出所有)

如果你只需要知道列表里是否存在这样的组合,不需要列出所有,那可以找到第一个满足条件的组合就立刻停止遍历,节省时间:

import math

original_list = [8,5,73,3,34,4,23,73]
num_set = set(original_list)
found = False

for a in original_list:
    for b in original_list:
        c_squared = a**2 + b**2
        c = math.isqrt(c_squared)
        if c * c == c_squared and c in num_set:
            print(f"存在满足条件的组合:{a}² + {b}² = {c}²")
            found = True
            break  # 找到b后跳出内层循环
    if found:
        break  # 找到a后跳出外层循环

if not found:
    print("列表中没有满足a²+b²=c²的元素组合")

这种方法在数据量较大时优势明显,不用遍历完所有元素就能得到结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:52:06