2017-11-28 2 views
1

Ich bin manuell zwei gegebene Matrizen in einer Textdatei zusammenführen, ohne irgendeine Art von Modul zu importieren. Es sieht aus wie:Verketten Matrix PYTHON (No Numpy)

[[1,2][3,4]],[[5,6,7],[8,9,10]] 

ich diesen Code haben:

def combine(filename): 
    with open(filename, 'r') as myfile: 
     data=myfile.read().split() 
     a=data[0].split() 
     b=data[1].split() 
    a=eval(a[0]) 
    b=eval(b[0]) 
    row_a=len(a) 
    row_b=len(b) 
    col_a=len(a[0]) 
    col_b=len(b[0]) 
    concatenated=[] 
    if row_a==row_b: #build horizontally 
     for i in range (row_a): 
      concatenated.append(a[i]) 
      for i in range (row_b): 
       concatenated.append(b[i]) 
     return concatenated 
    if col_a==col_b: #build vertically 
     for i in range (col_a): 
      concatenated.append(a[i]) 
      for i in range (col_b): 
       concatenated.append(b[i]) 
     return concatenated 
    else: 
     print ("Error") 

Aber es gibt:

[[1, 2], [5, 6, 7], [8, 9, 10], [3, 4], [5, 6, 7], [8, 9, 10]] 

Statt:

[[1,2,5,6,7],[3,4,8,9,10]] 

Alle Ideen, wie kann ich Mach das funktionieren? Vielen Dank im Voraus!

Antwort

2

Sie können ast.literal_eval verwenden:

import ast 
final_results = [a+b for a, b in zip(*ast.literal_eval(open('filename.txt')))] 

Ausgang:

[[1, 2, 5, 6, 7], [3, 4, 8, 9, 10]] 

Edit: ohne Importe, Sie eval verwenden können. Beachten Sie jedoch, dass eval recht unsicher ist und somit nur auf Zeichenfolge aus einer vertrauenswürdigen Quelle ausgeführt werden muss:

final_results = [a+b for a, b in zip(*eval(open('filename.txt').read()))] 
+0

Gibt es eine Möglichkeit, dies Import ohne zu tun? :) Vielen Dank! –

+0

@FatCat siehe meine letzte Änderung. – Ajax1234

+0

Vielen Dank, wenn ich nur meinen bestehenden Code bearbeiten würde, ist es nicht möglich, nur verkettet = [a + b] unter die if-Anweisungen zu setzen? –