如何在Python中生成二维矩阵的所有唯一排列并维持顺序?
在Python中生成二维矩阵列元素的所有组合(保持顺序)
你要的效果本质是取原矩阵每一列的所有可选元素,生成它们的笛卡尔积,这样每个结果子列表的位置对应原矩阵的列,自然保持顺序。下面是两种实用实现方式:
用itertools.product(最简洁高效)
Python标准库的itertools.product专门用来生成笛卡尔积,完美匹配这个需求:
import itertools matrix = [[1, 2, 3], [4, 5, 6]] # 转置矩阵,得到各列的元素集合:[[1,4], [2,5], [3,6]] columns = list(zip(*matrix)) # 生成所有列元素的组合,再转成列表格式 result = [list(combo) for combo in itertools.product(*columns)] print(result)
运行后输出就是你要的结果:
[[1, 2, 3], [1, 2, 6], [1, 5, 3], [1, 5, 6], [4, 2, 3], [4, 2, 6], [4, 5, 3], [4, 5, 6]]
手动实现(不依赖标准库)
如果不想用itertools,可以用循环逐步构建结果:
matrix = [[1, 2, 3], [4, 5, 6]] columns = list(zip(*matrix)) result = [[]] # 遍历每一列,逐步扩展组合 for col in columns: temp = [] for existing in result: for num in col: temp.append(existing + [num]) result = temp print(result)
关键逻辑说明
zip(*matrix)是核心操作:把原矩阵的行转成列,让我们能直接获取每一列的所有可选元素。- 两种方法的结果数量都是
每列元素个数的乘积,这里每列有2个元素,共3列,所以2^3=8个结果,完全符合你的预期。
内容的提问来源于stack exchange,提问作者user129994
相关产品推荐
相关产品推荐

