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

Python实现列表单元素或多元素固定的排列组合方法

固定多索引位置的列表全排列实现方法

你已经实现了单元素固定的列表全排列,要扩展到多元素固定的场景,核心思路是只对非固定位置的元素做全排列,再将固定元素还原到指定索引,这种方法效率高,适合长列表。

实现步骤

  1. 明确原列表和需要固定的索引集合(用集合是为了快速判断某个位置是否固定)
  2. 提取所有非固定位置的元素,作为待排列的可移动元素
  3. 生成可移动元素的全排列
  4. 对每个排列结果,构建最终列表:先填充固定元素到对应索引,再把排列后的可移动元素依次填入剩余位置

代码示例

比如原列表a = [5,6,7,9,10],要固定索引0(元素5)和索引2(元素7)的位置:

from itertools import permutations

a = [5,6,7,9,10]
fixed_indices = {0, 2}  # 要固定的索引集合

# 提取可移动元素:所有不在固定索引里的元素
moveable_elements = [elem for idx, elem in enumerate(a) if idx not in fixed_indices]

# 生成可移动元素的全排列
perms = permutations(moveable_elements)

result = []
for perm in perms:
    # 初始化结果列表,先填充固定元素
    current = [None] * len(a)
    for idx in fixed_indices:
        current[idx] = a[idx]
    # 填充排列后的可移动元素到剩余位置
    perm_iter = iter(perm)
    for idx in range(len(a)):
        if idx not in fixed_indices:
            current[idx] = next(perm_iter)
    result.append(current)

print(result)

代码说明

  • 用集合fixed_indices判断位置是否固定,时间复杂度为O(1),比列表判断更高效
  • 直接构建结果列表,避免了插入操作的性能损耗,尤其适合长列表
  • 逻辑通用,不管固定1个还是N个索引,都可以直接复用

输出示例

上述代码的输出会是所有固定5在索引0、7在索引2的排列,比如:

[[5,6,7,9,10], [5,6,7,10,9], [5,9,7,6,10], [5,9,7,10,6], [5,10,7,6,9], [5,10,7,9,6]]

内容的提问来源于stack exchange,提问作者Zeryab Hassan Kiani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:25:01