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

Python程序开发:统计列表中可构成三角形的三元组数量

解决Python统计三角形三元组数量的问题

首先,咱们可以先把判断三角形的check函数简化优化——其实判断三条边能否构成三角形,只需要较小的两条边之和大于最大边就足够了,因为最大边加任何一条边肯定大于第三条边,排序后就能轻松实现这个判断:

def check(a, b, c):
    sorted_sides = sorted([a, b, c])
    return sorted_sides[0] + sorted_sides[1] > sorted_sides[2]

接下来是统计符合条件的三元组数量的核心部分:咱们需要统计列表中所有不重复的三元组组合(毕竟[2,3,4]和[3,2,4]是同一个组合,不能重复计数)。这里有两种常见实现方式:

方式1:使用itertools.combinations(简洁高效)

Python的itertools.combinations可以直接生成列表中所有长度为3的无序组合,不会重复,非常适合这个场景:

import itertools

def check(a, b, c):
    sorted_sides = sorted([a, b, c])
    return sorted_sides[0] + sorted_sides[1] > sorted_sides[2]

def test(lst):
    valid_count = 0
    # 遍历所有三元组组合
    for trio in itertools.combinations(lst, 3):
        if check(*trio):
            valid_count += 1
    return valid_count

# 测试你的示例
print(test([1,1,3]))  # 输出0
print(test([2,789,5,3,3237,4]))  # 输出3

方式2:手动三重循环(直观易懂)

如果不想依赖标准库,也可以用三重循环手动生成组合,只要保证索引i < j < k,就能避免重复统计同一个组合:

def check(a, b, c):
    sorted_sides = sorted([a, b, c])
    return sorted_sides[0] + sorted_sides[1] > sorted_sides[2]

def test(lst):
    valid_count = 0
    n = len(lst)
    # 三重循环,确保每个组合只被遍历一次
    for i in range(n):
        for j in range(i + 1, n):
            for k in range(j + 1, n):
                if check(lst[i], lst[j], lst[k]):
                    valid_count += 1
    return valid_count

这两种方式都能完美匹配你给出的示例结果,你可以根据自己的需求选择使用~

内容的提问来源于stack exchange,提问作者Luke S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:05:04