2014-12-06 2 views
0

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

것은 내가 다음에 무엇을하고 싶은 때문에, 다른 암호문을 받고 아래와 같이 위의 각 열을 알파벳 순서대로 인쇄됩니다을하지 않은 무엇 :

나는 2 차원 매트릭스를 통과하고 아래 같은 모든 열 항목을 가지고

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 

: 여기

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

키워드 키의 각 문자를 어떻게 추가합니까 (예 : 'H' 'I'D ''E ') 숫자 0,1,2,3이있는 목록에?

아니면 더 효율적인 해결책 일 수 있습니다. 행렬을 만들 때 어떻게 keywordKey 열에 글자를 넣을 수 있습니까? 사전이 도움이 될까요? 그런 다음 사전을 정렬하고 최종 암호를 인쇄 할 수 있습니다.

많은 감사

답변

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] 

이제 목록을 반복하고를 사용하여 각 항목에 색인을 적용하면됩니다.및 해당 항목 가져 오기 :

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