python - 矩阵中列的排列

标签 python algorithm matrix iteration

我有一个简短的问题!我有一个矩阵,它有 8 列和大约 20 行。矩阵的每个索引都填充了一些字母。我想知道是否有一种有效的方法来生成矩阵的排列(列)?我正在研究列换位密码,我想从本质上测试每个列的排列(交换整个列),以便我可以破解密码。

在 python 中使用 itertools 或我不知道的任何其他技术是否有一种有效的方法来执行此操作?非常感谢您的帮助!

我首先初始化数组,这样做:

LMATRIX = [['' for x in xrange(8)] for x in xrange(53)] 

然后用字母填充它...

例如 排列前:

0 1 2 3 4 5 6 7
B C R H L M N O
J F K A B C D R

在排列的一次迭代之后:

**1 0** 2 3 4 5 6 7 
**C B** R H L M N O
**F J** K A B C D R

再次感谢!

最佳答案

我没怎么玩过这个解决方案,但它似乎适用于简单的情况。出于可读性目的,矩阵较小。这个想法是 itertools.permutations 将为每一行生成相同的排列,然后您需要将它们zip 在一起以重建每个排列矩阵.您需要将下面的代码概括为更大的矩阵。仔细阅读 itertools.permutations 以确保所有潜在输入的排列都是“相同的”

In [1]: import string                                                                        

In [2]: import random                                                                        

In [3]: LMATRIX = [[random.choice(string.ascii_uppercase) for y in xrange(3)] for x in xrange(2)]

In [4]: def print_mat(m):
   ...:     for row in m:
   ...:         print row
   ...:         

原始矩阵为:

In [5]: print_mat(LMATRIX)
['V', 'E', 'E']
['G', 'X', 'T']


In [6]: from itertools import permutations

In [7]: for perm in zip(permutations(LMATRIX[0]), permutations(LMATRIX[1])):
   ...:     print_mat(perm)
   ...:     print "\n"
   ...:     
('V', 'E', 'E')
('G', 'X', 'T')

('V', 'E', 'E')
('G', 'T', 'X')

('E', 'V', 'E')
('X', 'G', 'T')

('E', 'E', 'V')
('X', 'T', 'G')

('E', 'V', 'E')
('T', 'G', 'X')

('E', 'E', 'V')
('T', 'X', 'G')

关于python - 矩阵中列的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921718/

相关文章:

java - 基于线性方程计算值的算法

matlab - 如何解决 MATLAB "Matrix dimensions must agree"错误?

python - 两个特征矩阵的有效成对相关

python - 在 Qt5 日历小部件中突出显示日期间隔

python - 如何根据当前 URL 中的 ID 过滤 ListView 输出

python - 在 seaborn kdeplot 中设置置信度

python - 如何使用类似的驱动程序自动执行网页跨度控制(例如 slider 值)。 findElement_by_xpath (),Ubuntu Linux 和 chromium 自动测试

javascript - ng类在angularjs中使用模数

algorithm - 如何计算三个嵌套依赖循环的时间复杂度?

javascript - 如何在 ThreeJS 中将网格旋转 90 度?