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

如何用Python生成多列表间索引唯一的所有组合?

Python实现符合条件的组合生成

要解决这个问题,核心是给每个列表分配唯一的索引,再从对应列表中取出该索引的元素组成组合。具体实现步骤如下:

思路解析

  1. 问题本质是从0到M-1的索引中,生成所有长度为N的无重复索引序列(每个序列对应给N个列表分配各自的索引);
  2. 对每个索引序列,依次从每个列表中取出对应位置的元素,即可得到符合条件的组合。

代码实现

我们可以借助Python标准库itertools.permutations来生成所有无重复的索引排列,它能直接生成从M个索引中选N个元素的所有有序不重复组合:

import itertools

# 示例输入的三个列表
list1 = ["d11", "d12", "d13", "d14"]
list2 = ["d21", "d22", "d23", "d24"]
list3 = ["d31", "d32", "d33", "d34"]
# 将所有列表存入一个统一的列表中
input_lists = [list1, list2, list3]

# 获取列表数量N和单个列表的元素数M
N = len(input_lists)
M = len(list1)  # 题目保证所有列表长度均为M

# 生成所有长度为N的无重复索引排列
index_perms = itertools.permutations(range(M), N)

# 生成所有符合条件的组合
valid_combinations = [
    [lst[idx] for lst, idx in zip(input_lists, indices)]
    for indices in index_perms
]

# 打印前5个组合示例
for idx, combo in enumerate(valid_combinations[:5], 1):
    print(f"comb{idx} = {combo}")

代码说明

  • itertools.permutations(range(M), N):生成从0到M-1中选N个元素的所有有序排列,确保每个序列里的索引都不重复;
  • 列表推导式里通过zip(input_lists, indices)将每个列表和对应的索引配对,取出元素组成组合;
  • 最终valid_combinations就是所有满足要求的组合集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:07:42