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

请求修改Python随机三元组求和为0的代码以实现功能

问题解决:找出数组中和为0的所有三元组

需求:从数组nums = [-1,0,1,2,-1,-4]中找出所有和为0的三元组,示例输出为[-1, 0, 1]、[-1, 2, -1]。

原代码存在的问题

  • 第一段代码:
    1. 函数内修改全局变量l未声明global,会触发UnboundLocalError;
    2. 递归逻辑只会不断随机选取三元组,直到找到一个符合条件的,无法收集所有结果,还可能陷入无限递归。
  • 第二段代码:
    仅随机选取一次三元组,不符合条件就直接结束,无法遍历所有可能的组合。

修改后的代码

方案一:高效遍历所有组合(推荐)

无需随机抽样,直接生成数组中所有可能的三元组,筛选和为0的结果并去重:

from itertools import combinations

nums = [-1, 0, 1, 2, -1, -4]
result = []

# 生成所有三元组组合
for triplet in combinations(nums, 3):
    if sum(triplet) == 0:
        # 排序后去重,避免重复的三元组(如[-1,2,-1]和[-1,-1,2]视为同一组)
        sorted_triplet = sorted(triplet)
        if sorted_triplet not in result:
            result.append(sorted_triplet)

# 格式化输出
print(", ".join(str(t) for t in result))

输出结果:

[-1, 0, 1], [-1, -1, 2]

方案二:随机抽样收集所有结果(满足随机选取要求)

如果必须通过随机选取的方式逐步收集所有符合条件的三元组,可使用以下代码:

import random
from itertools import combinations

nums = [-1, 0, 1, 2, -1, -4]
all_valid = []
# 先获取所有唯一的有效三元组(用于判断是否收集完成)
target_set = set(tuple(sorted(t)) for t in combinations(nums, 3) if sum(t) == 0)

while set(tuple(t) for t in all_valid) != target_set:
    triplet = random.sample(nums, 3)
    sorted_trip = sorted(triplet)
    if sum(triplet) == 0 and sorted_trip not in all_valid:
        all_valid.append(sorted_trip)

print(", ".join(str(t) for t in all_valid))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:54:42