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

如何从列表生成两组元素拼接后组成的所有可能二元组合

通用列表生成目标二元组的实现方案

前置规则明确

我们首先对齐二元组的生成约束:

  • 两个分组必须覆盖原列表所有元素,且不存在重叠元素
  • 分组内部的元素可以任意排序后拼接为整数
  • 默认排除任意分组为空的情况(示例中无空分组对应的二元组,若有需要可保留)

实现步骤

步骤1:生成所有元素归属的拆分方案

对于长度为n的列表,每个元素有2种归属选择(分到第一组/第二组),总共有2n种拆分方式,过滤掉两组全空的情况后,剩余2n - 2种有效拆分。

步骤2:生成分组内的所有拼接数值

对每个拆分得到的两个分组,分别生成分组元素的全排列,将每种排列的元素按顺序拼接后转成整数。

步骤3:生成二元组集合

对同一拆分下两个分组的所有拼接数值做笛卡尔积,得到该拆分对应的所有二元组。

步骤4:可选去重

如果原列表存在重复元素,会生成重复的二元组,可通过集合去重得到唯一结果。

代码示例(Python)

from itertools import permutations, product

def get_all_tuple(input_list):
    n = len(input_list)
    result = set()
    # 遍历所有拆分方式,mask每一位代表对应下标的元素归属:1归第一组,0归第二组
    for mask in range(1, (1 << n) - 1):
        group1 = [input_list[i] for i in range(n) if mask >> i & 1]
        group2 = [input_list[i] for i in range(n) if not (mask >> i & 1)]
        # 生成组1的所有拼接数值
        nums1 = set(int(''.join(map(str, p))) for p in permutations(group1))
        # 生成组2的所有拼接数值
        nums2 = set(int(''.join(map(str, p))) for p in permutations(group2))
        # 笛卡尔积生成二元组
        for a, b in product(nums1, nums2):
            result.add((a, b))
    return list(result)

# 测试示例
test_list = [4,3,2,5]
res = get_all_tuple(test_list)
# 可验证示例中的(43,25)、(3,245)、(53,24)都在结果中
print((43,25) in res) # 输出True
print((3,245) in res) # 输出True
print((53,24) in res) # 输出True

补充说明

如果不需要考虑分组内的顺序(比如要求元素保留原列表的相对顺序拼接),只需要把全排列permutations的逻辑替换为按原顺序拼接即可,可大幅降低计算量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:04