2017-11-28 7 views
1

어떤 종류의 모듈도 가져 오지 않고 텍스트 파일에 포함 된 두 개의 주어진 행렬을 수동으로 병합합니다. 이 코드가매트릭스 연결 PYTHON (numpy 없음)

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

:

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") 

을하지만 반환

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

대신에 :

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

모든 아이디어를 어떻게 수에 것 같습니다 이거 만들어? 미리 감사드립니다.

답변

2

당신은 ast.literal_eval를 사용할 수 있습니다

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

출력 :

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

편집 : 어떤 수입하지 않고, 당신이 eval를 사용할 수 있습니다. 단지 신뢰할 수있는 소스에서 문자열을 실행해야하므로 eval이 매우 불안이다 그러나 참고 : 가져 오기를 사용하지 않고 할 수있는 방법이

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

있습니까? :) 고맙습니다! –

+0

@FatCat 최근 편집을 참조하십시오. – Ajax1234

+0

감사합니다. 기존 코드를 편집하는 경우 if 문 바로 아래에 [a + b]를 연결하는 것이 불가능합니까? –