Python 将值追加到列表的开头

Python 将值追加到列表的开头,python,list,encryption,transpose,Python,List,Encryption,Transpose,目前正在Python中开发2D转置密码。我有一个包含编码信息的列表,如下所示: ['BF', 'AF', 'AF', 'DA', 'CD', 'DD', 'BC', 'EF', 'DA', 'AA', 'EF', 'BF'] D E H I ['A', 'F', 'B', 'F'] ['D', 'A', 'A', 'F'] ['D', 'D', 'C', 'D'] ['E', 'F', 'B', 'C'] ['A', 'A', 'D', 'A'] ['B', 'F', '

目前正在Python中开发2D转置密码。我有一个包含编码信息的列表,如下所示:

['BF', 'AF', 'AF', 'DA', 'CD', 'DD', 'BC', 'EF', 'DA', 'AA', 'EF', 'BF']
  D    E    H    I
['A', 'F', 'B', 'F']
['D', 'A', 'A', 'F']
['D', 'D', 'C', 'D']
['E', 'F', 'B', 'C']
['A', 'A', 'D', 'A']
['B', 'F', 'E', 'F']
    b = [[matrix2[i][j] for i in range(len(matrix2))] for j in range(len(matrix2[0]))]
    for index, item in enumerate (b):
        print("\n",index, item)

OUTPUT:------
 0 ['B', 'A', 'C', 'B', 'D', 'E']

 1 ['F', 'F', 'D', 'C', 'A', 'F']

 2 ['A', 'D', 'D', 'E', 'A', 'B']

 3 ['F', 'A', 'D', 'F', 'A', 'F']
下一步是获取该列表,将其拆分并根据用户输入的关键字将其放入新的矩阵中。我有以下资料:

Enter the keyword for final encryption: hide
  H    I    D    E
['B', 'F', 'A', 'F']
['A', 'F', 'D', 'A']
['C', 'D', 'D', 'D']
['B', 'C', 'E', 'F']
['D', 'A', 'A', 'A']
['E', 'F', 'B', 'F']
我下一步想做但没有做的是将上面的每一列按字母顺序打印出来,从而得到另一个密码文本,如下所示:

['BF', 'AF', 'AF', 'DA', 'CD', 'DD', 'BC', 'EF', 'DA', 'AA', 'EF', 'BF']
  D    E    H    I
['A', 'F', 'B', 'F']
['D', 'A', 'A', 'F']
['D', 'D', 'C', 'D']
['E', 'F', 'B', 'C']
['A', 'A', 'D', 'A']
['B', 'F', 'E', 'F']
    b = [[matrix2[i][j] for i in range(len(matrix2))] for j in range(len(matrix2[0]))]
    for index, item in enumerate (b):
        print("\n",index, item)

OUTPUT:------
 0 ['B', 'A', 'C', 'B', 'D', 'E']

 1 ['F', 'F', 'D', 'C', 'A', 'F']

 2 ['A', 'D', 'D', 'E', 'A', 'B']

 3 ['F', 'A', 'D', 'F', 'A', 'F']
这是我的密码:

def encodeFinalCipher():
    matrix2 = []
    # Convert keyword to upper case
    keywordKey = list(keyword.upper())

    # Convert firstEncryption to a string
    firstEncryptionString = ''.join(str(x) for x in firstEncryption)

    # Print the first table that will show the firstEncryption and the keyword above it
    keywordList = list(firstEncryptionString)
    for x in range(0,len(keywordList),len(keyword)):
        matrix2.append(list(keywordList[x:x+len(keyword)]))

    # Print the matrix to the screen
    print ('  %s' % '    '.join(map(str, keywordKey)))
    for letters in matrix2:
        print (letters)

    return finalEncryption
我遍历了2D矩阵,得到了如下所有列条目:

['BF', 'AF', 'AF', 'DA', 'CD', 'DD', 'BC', 'EF', 'DA', 'AA', 'EF', 'BF']
  D    E    H    I
['A', 'F', 'B', 'F']
['D', 'A', 'A', 'F']
['D', 'D', 'C', 'D']
['E', 'F', 'B', 'C']
['A', 'A', 'D', 'A']
['B', 'F', 'E', 'F']
    b = [[matrix2[i][j] for i in range(len(matrix2))] for j in range(len(matrix2[0]))]
    for index, item in enumerate (b):
        print("\n",index, item)

OUTPUT:------
 0 ['B', 'A', 'C', 'B', 'D', 'E']

 1 ['F', 'F', 'D', 'C', 'A', 'F']

 2 ['A', 'D', 'D', 'E', 'A', 'B']

 3 ['F', 'A', 'D', 'F', 'A', 'F']
如何将关键字key(例如“H”“I”“D”“e”)的每个字母附加到数字0,1,2,3所在的列表中

或者可能是一个更有效的解决方案。创建矩阵时,我如何将字母放入关键字键列?字典在这里有用吗?然后我可以对字典进行分类并打印最后的密码


非常感谢

您可以这样做:

>>> from operator import itemgetter
>>> from pprint import pprint
>>> lst = [['B', 'F', 'A', 'F'],
['A', 'F', 'D', 'A'],
['C', 'D', 'D', 'D'],
['B', 'C', 'E', 'F'],
['D', 'A', 'A', 'A'],
['E', 'F', 'B', 'F']]
>>> key = 'HIDE'
使用
key
中的相应值对
xrange(len(key))
range(len(key))
进行排序,然后您将得到一个索引列表:

>>> indices = sorted(xrange(len(key)), key=key.__getitem__)
>>> indices
[2, 3, 0, 1]
现在,我们需要做的就是在列表上循环,并使用
操作符.itemgetter将这些索引应用于每个项目,并获得相应的项目:

>>> pprint([list(itemgetter(*indices)(x)) for x in lst])
[['A', 'F', 'B', 'F'],
 ['D', 'A', 'A', 'F'],
 ['D', 'D', 'C', 'D'],
 ['E', 'F', 'B', 'C'],
 ['A', 'A', 'D', 'A'],
 ['B', 'F', 'E', 'F']]
#or simply
>>> pprint([[x[i] for i in indices] for x in lst])
[['A', 'F', 'B', 'F'],
 ['D', 'A', 'A', 'F'],
 ['D', 'D', 'C', 'D'],
 ['E', 'F', 'B', 'C'],
 ['A', 'A', 'D', 'A'],
 ['B', 'F', 'E', 'F']]