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

Python计算相同数组笛卡尔积后如何去除无序等价重复组合

解决方案

你需要的本质是从单个数组中取长度为2的不重复无序组合,可以按你的实际场景选以下两种方案:

方案1:直接生成目标结果(最优,无需先算笛卡尔积)

因为你的A、B数组完全相同,直接用itertools.combinations生成无序组合即可,效率远高于生成笛卡尔积后再去重:

import numpy as np
from itertools import combinations

A = np.array(['A','B','C'])
result = list(combinations(A, 2))

输出结果和你需要的完全一致:

[('A', 'B'), ('A', 'C'), ('B', 'C')]

方案2:对已生成的笛卡尔积结果去重

如果你已经提前生成了笛卡尔积结果b,可以通过排序后判重的方式过滤:

保留原始顺序版本

seen = set()
result = []
for item in b:
    # 跳过两个元素相同的项
    if item[0] == item[1]:
        continue
    # 对元组排序后判重,保证逆序对只会被保留一次
    sorted_item = tuple(sorted(item))
    if sorted_item not in seen:
        seen.add(sorted_item)
        result.append(item)

简洁版本(不保留原始顺序)

result = list({tuple(sorted(i)) for i in b if i[0] != i[1]})

纯Numpy实现方案

如果不想依赖itertools,可以用numpy上三角索引直接过滤:

import numpy as np
A = np.array(['A','B','C'])
# 生成笛卡尔积数组
cartesian = np.array(np.meshgrid(A, A)).T.reshape(-1, 2)
# 取上三角(k=1表示跳过对角线的相同元素对)
result = cartesian[np.triu_indices(len(A), k=1)].tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:06:00