将值附加到列表的开头

时间:2014-12-06 17:42:18

标签: python list encryption transpose

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

['BF', 'AF', 'AF', 'DA', 'CD', 'DD', 'BC', 'EF', 'DA', 'AA', 'EF', 'BF']

下一步是获取该列表,将其拆分并将其放入关于用户输入的关键字的新矩阵中。我在下面提到:

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']

接下来要完成的内容<尚未完成取上面的每一列并按字母顺序打印,因此获取另一个密文,如下所示:

  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']

这是我的代码:

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矩阵并得到了如下所有的列条目:

    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']

如何将关键字键的每个字母(例如&#39; H&#39;我&#39;&#39;&#39; E&#39;)附加到列表中数字0,1,2,3是哪里?

或者可能是一种更有效的解决方案。在创建矩阵时,如何将字母放入keywordKey列?字典会在这里帮忙吗?然后我可以对字典进行排序并打印最终的密码。

非常感谢

1 个答案:

答案 0 :(得分:1)

您可以这样做:

>>> 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'

使用xrange(len(key))中的相应值对range(len(key))key进行排序,然后您将获得一系列索引:

>>> indices = sorted(xrange(len(key)), key=key.__getitem__)
>>> indices
[2, 3, 0, 1]

现在我们需要做的就是遍历列表并使用operator.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']]