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

如何在Python中实现含部分列表位置交换的排列组合?

实现固定部分列表位置+指定列表交换位置的排列组合

方法一:直接生成两种组合后合并

你原来的代码是固定list1→list2→list3→list4的顺序生成笛卡尔积,要添加list2和list3交换位置的组合,最简单的方式就是分别生成两种顺序的组合,再把结果合并:

list1 = [1]
list2 = [6, 7, 8]
list3 = [9, 10, 11]
list4 = [12]

print("The original lists are : " + str(list1) +
      " " + str(list2) +
      " " + str(list3) +
      " " + str(list4))

# 原顺序的组合:list1→list2→list3→list4
res_original = [[i, j, k, l] for i in list1
                for j in list2
                for k in list3
                for l in list4]
# 交换list2和list3后的组合:list1→list3→list2→list4
res_swapped = [[i, k, j, l] for i in list1
               for j in list2
               for k in list3
               for l in list4]
# 合并两组结果
res = res_original + res_swapped

print("All possible permutations are:")
for perm in res:
    print(*perm)

运行后会先输出你原来的固定顺序结果,接着输出list2和list3交换后的所有组合,完全符合需求。

方法二:更灵活的扩展方式(支持多列表交换)

如果以后需要对更多列表做位置交换,手动写多个推导式会很麻烦,可以用Python标准库itertools里的工具简化操作:

from itertools import product, permutations

list1 = [1]
list2 = [6, 7, 8]
list3 = [9, 10, 11]
list4 = [12]

# 把需要交换位置的列表放在一起
variable_lists = [list2, list3]
# 生成可变列表的所有排列方式(这里2个列表,会得到原顺序和交换顺序两种)
variable_permutations = permutations(variable_lists)

res = []
# 遍历每一种排列方式
for perm in variable_permutations:
    # 用product生成固定列表+当前排列的可变列表的笛卡尔积
    for combo in product(list1, *perm, list4):
        res.append(list(combo))

print("The original lists are : " + str(list1) +
      " " + str(list2) +
      " " + str(list3) +
      " " + str(list4))
print("All possible permutations are:")
for item in res:
    print(*item)

这个方法的好处是:如果以后你想让3个列表任意交换位置,只需要把这3个列表放进variable_lists里,代码会自动生成所有可能的位置排列对应的组合,不用修改其他逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:05:26