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

如何以Pythonic的方式获取两个等长列表间的所有元组排列组合

如何以Pythonic的方式获取两个等长列表间的所有元组排列组合

我现在有两个长度相同的列表,想找一种Pythonic的写法,生成一个嵌套列表——里面每个子列表都是由n个元组构成的,而且每个子列表都是两个列表元素间的一种独特排列组合。举个实际的例子:

给定:

a = [1, 2]
b = [3, 4]

期望得到的输出是:

[ [(1, 3), (2, 4)], [(1, 4), (2, 3)] ]

我之前查过类似的问题,但都不是我要的效果;也翻了itertools标准库,一开始没找到合适的工具,想问问有没有优雅的Python写法来解决这个问题?


优雅的解决方案

其实用itertools.permutations就能完美解决你的需求,思路特别直接:对第二个列表生成所有可能的排列,然后把每个排列和第一个列表的元素逐一配对成元组,再把这些元组打包成列表即可。

直接上代码:

import itertools

a = [1, 2]
b = [3, 4]

# 列表推导式+permutations+zip的组合,简洁又高效
result = [list(zip(a, perm)) for perm in itertools.permutations(b)]
print(result)

运行这段代码就能得到你想要的输出:

[[(1, 3), (2, 4)], [(1, 4), (2, 3)]]

为什么这是Pythonic的?

  • 用了列表推导式:这是Python里处理这类“生成新列表”场景的经典写法,简洁易读,完全贴合Python追求的“优雅”风格
  • 复用标准库工具:itertools.permutations是专门用来生成可迭代对象全排列的工具,不用自己手动实现排列逻辑,既避免重复造轮子,又保证了代码的执行效率
  • 搭配zip函数:zip是Python里用来将多个可迭代对象元素一一配对的常用工具,在这里正好用来把a的元素和b的每个排列元素精准配对成元组

这个方法还能适配更长的列表,比如当n=3时:

a = [1, 2, 3]
b = [4, 5, 6]
result = [list(zip(a, perm)) for perm in itertools.permutations(b)]
# 结果会包含6个不同的嵌套子列表,每个都是唯一的元组排列组合

备注:内容来源于stack exchange,提问作者Jeffrey Van Laethem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:39:51