2017-02-08 5 views
0
import textwrap 

def get_coord(x,matrix): 

    code = 'ADFGVX' 
    for i in range(len(matrix)): 
     for a in range(len(matrix[i])): 
      if matrix[i][a] == x: 
       return code[i] + code[a] 
    return -1, -1 

def encode(message, secret_alphabet, keyword): 

    message = ''.join(message.split()).lower() 
    matrix = [secret_alphabet[i * 6:(i+1) * 6] for i in range(6)] 
    first = '' 
    lk = len(keyword) 
    for i in message: 
     first += get_coord(i, matrix) 
    first = textwrap.wrap(first, lk)  

encode("I am going", 
     "dhxmu4p3j6aoibzv9w1n70qkfslyc8tr5e2g", 
     "cipher") 

Ich habe eine Liste von Zeichenfolgen, die ich zusammenfügen muss, um Spalten zu erstellen. Ich benutzte textwrap diese Liste zu erstellen:Trennen einer Liste von Zeichenfolgen in Spalten

nach texwrapping ersten erhalte ich:

['FADVAG', 'XXDXFA', 'GDXX'] 

Ich brauche meine Ausgabe aussehen:

['FXG', 'AXD', 'DDX', 'VXX', 'AF', 'GX'] 

Wie kann ich das erreichen?

+0

Sie müssen einen Teil des Codes und wie Sie zum ersten Array gekommen sind. – jonmrich

+0

''DDD'' ist ein Tippfehler, es sollte'' DDX'' sein – MYGz

Antwort

1

Ein Ansatz mit itertools.zip_longest und str.join:

>>> from itertools import zip_longest 
>>> [''.join(item) for item in zip_longest('FADVAG', 'XXDXFA', 'GDXX', fillvalue='')] 
['FXG', 'AXD', 'DDX', 'VXX', 'AF', 'GA'] 

Allerdings bedeutet dies nicht Ihren Wünschen drittes und letztes Element herzustellen. War das ein Fehler im ursprünglichen Beitrag?

+1

Ich weiß nicht, warum ''GA'' in der Liste verschwindet :). Und seltsamerweise erscheint "AX" von irgendwo. – MYGz

+0

Entschuldigung wegen meiner schlechten Tipparbeit Ich war schon seit Stunden dabei, haha, ich werde es trotzdem versuchen –

+0

Gibt es eine Möglichkeit, eine Liste an zip_longest zu übergeben und die gewünschte Ausgabe zu erhalten? –

Verwandte Themen