在 Python 中,如何生成数组的排列,其中每一列和每一行只有一个元素?

Posted

技术标签:

【中文标题】在 Python 中,如何生成数组的排列,其中每一列和每一行只有一个元素?【英文标题】:In Python, how do you generate permutations of an array where you only have one element from each column and row? 【发布时间】:2013-11-07 13:31:25 【问题描述】:

例如:

假设你有以下数组:

[1,2,3]
[4,5,6]
[7,8,9]

你想生成这个数组:

[1,5,9]
[1,6,8]
[4,2,9]
[4,8,3]
[7,2,6]
[7,5,3]

【问题讨论】:

【参考方案1】:
import itertools

A=[[1,2,3],
[4,5,6],
[7,8,9]]

for P in itertools.permutations(range(len(A))):
    print [A[p][i] for i,p in enumerate(P)]

打印:

[1, 5, 9]
[1, 8, 6]
[4, 2, 9]
[4, 8, 3]
[7, 2, 6]
[7, 5, 3]

【讨论】:

谢谢,效果很好。有人能解释一下它是如何工作的吗? 对于每一列 i,它选择一个行 p。 i 都是唯一的,因为它们是 0,1,2,... p 都是唯一的,因为它们来自排列。 itertools.permutations 生成所有排列,因此它会遍历所有选择。

以上是关于在 Python 中,如何生成数组的排列,其中每一列和每一行只有一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中,如何创建可变长度组合或排列?

python非递归全排列

创建numpy数组,其中值在其他两个相同大小排列的范围内

整数和数组排列之间的惰性映射,而不生成所有排列

打印数组所有排列 python

如何按排序顺序生成数组的所有排列?