在python中移动列

在python中移动列,python,Python,我以前从未使用过python,但对于一个学校单元来说,我认为我应该学习它,我有一个密码文本要破解,多亏了这里的一些帮助,我在Transposition上得到了一次蛮力攻击:) 我想尝试的是,下一步不只是尝试所有可能的网格大小,我现在还想尝试所有不同的列变量 ICBKAOREMDERAEAA 我是个破译密码的人 要手动破解这个,我必须设置一个4 x 4的网格 I C B K A O R E M D E R A E A A 我可以通过以下代码实现这一点: s = "ICBKAOREMDERAEA

我以前从未使用过python,但对于一个学校单元来说,我认为我应该学习它,我有一个密码文本要破解,多亏了这里的一些帮助,我在Transposition上得到了一次蛮力攻击:)

我想尝试的是,下一步不只是尝试所有可能的网格大小,我现在还想尝试所有不同的列变量

ICBKAOREMDERAEAA
我是个破译密码的人

要手动破解这个,我必须设置一个4 x 4的网格

I C B K
A O R E
M D E R
A E A A
我可以通过以下代码实现这一点:

s = "ICBKAOREMDERAEAA"
for i in range(1, len(s) + 1): # range doesn't include upper bound
    rows = [s[x:x+i] for x in range(0, len(s), i)]
    #print('\n'.join(rows))
    columns = list(zip(*rows))
    print columns
但我现在想做的是,尝试每个列组合,因此对于上面的内容,它也会尝试:

C B K I
O R E A
D E R M
E A A A
所以它会把前立柱移到后面,等等

要完成此任务,我需要向代码中添加什么


谢谢大家

使用字符串切片来获得单独的列表

import math

encoded_txt = "ICBKAOREMDERAEAA"
GRIDSIZE = int(math.sqrt(len(encoded_txt)))
columns = [encoded_txt[i::GRIDSIZE] for i in range(GRIDSIZE)]

>>> columns
['IAMA', 'CODE', 'BREA', 'KERA']
然后使用itertools查找所有排列

>>>import itertools

>>>for permutation in itertools.permutations(columns):
       print(''.join(permutation))
IAMACODEBREAKERA
IAMACODEKERABREA
IAMABREACODEKERA
IAMABREAKERACODE
IAMAKERACODEBREA
IAMAKERABREACODE
CODEIAMABREAKERA
CODEIAMAKERABREA
CODEBREAIAMAKERA
CODEBREAKERAIAMA
CODEKERAIAMABREA
CODEKERABREAIAMA
BREAIAMACODEKERA
BREAIAMAKERACODE
BREACODEIAMAKERA
BREACODEKERAIAMA
BREAKERAIAMACODE
BREAKERACODEIAMA
KERAIAMACODEBREA
KERAIAMABREACODE
KERACODEIAMABREA
KERACODEBREAIAMA
KERABREAIAMACODE
KERABREACODEIAMA
现在,如果您只想获得仍按列顺序排列的排列,我将编写一段新代码:

def orderedpermutations(lst):
    from copy import copy # possibly deepcopy, but unnecessary for this implementation
    new_list = copy(lst)
    for _ in range(len(new_list)):
        new_list.append(new_list.pop(0))
        yield new_list
然后您可以将其用作生成器:

for permutation in orderedpermutations(columns):
    print(permutation)

基本上,您可以通过以下方法解决您的问题:s[0::4]、s[1::4]、s[2::4]、s[3::4]对不起,我该如何使用itertools?我对pythonI完全是新手,实际上我并不经常使用
itertools
,所以我不得不查阅文档。我确实使用了相关代码进行了编辑。非常感谢您的帮助。没问题,但不要满足于得到正确的答案!成为一名优秀程序员的关键是理解代码是如何工作的。深入阅读
itertools
的文档。仔细想想还有什么方法可以使用我使用的字符串切片技术。如果您有任何问题,请随时提问!谢谢我会的,唯一的问题是,如果我有一个大的输入
Tooitoulguphnlceiaggtceonateanseyeyntidsongingiludketouiyiiecshimphuwneboalhegghrnreqohegkrrtwtac
但我新的网格大小是6列,当我尝试运行列为6的代码时,我应该得到多少个答案,但到目前为止已经10分钟了,仍然在运行组合!