2017-11-24 16 views
0

내 코드는 다음을 수행합니다. N * N 행렬 파일을 읽습니다. 제 matrix.txt 파일목록 정수 인덱스를 조작 할 수 없습니다.

2 3 4

1 2~6

9 8 9

이고리스트 정수 [2,3,4], [1로 변환 2,6], [9,8,9]]

그러면 은 반전 될 때 내부 값을 색인 값으로 이동하여 내부 값을 변환합니다. 예 : [1] [0] = 1이므로 list [0] [1]의 값은 3에서 1로 변경되고 [1] [0]의 값은 1에서 3으로 변경됩니다.

이렇게하면 행렬을 이항시킨 후의 최종 출력은 모든 값을 뒤집은 후에

[[2,1,9], [3,2,8], [4,6,9]]가되어야합니다.

[0] [0] 또는 [1] [1] 또는 [2] [2]와 색인이 동일하면 아무 일도 일어나지 않습니다.

다음은 내 코드입니다. 거기에 내 스와핑 알고리즘에 문제가 있다고 생각되면 최종 결과를 얻을 수 없으므로 도움을 받으실 수 있습니다.

file =(input("Enter the filename: ")) 

f = open(file) 
matrix = [] 



for line in f: 
    line = line.strip() 
    line = line.split() 

    if line: 
     for x in range(len(line)): 

      line[x] = int(line[x]) 

     matrix.append(line) 

transpose = [] 

for x in range(len(matrix)): 
    transpose.append([]) 
    bob = transpose[x] 



    for y in range(len(bob)): 
     temp = 0 
     temp = matrix[x][bob[y]] 
     matrix[x][bob[y]] = matrix[y][bob[x]] 
     matrix[y][bob[x]] = temp 




print(matrix) 
print(transpose) 
+0

무엇이 문제입니까? 코드가 작동합니까? 그것은 무엇을 /하지 않는가 올바르지 않은가? 예제 입력에 대해 예상되는 결과는 무엇입니까? – wwii

+0

"목록 [0] [1]의 값이 2에서 1로 변경되어야합니다."3에서 1로 변경되지 않습니까? –

+0

예, 맞습니다. 3에서 1로 바뀌어야합니다. 약간 미안합니다. 그리고 내 질문은 최종 출력을 얻을 수 없기 때문에 스와핑 알고리즘을 수정하는 방법입니다. –

답변

0

참고로 이것은 zip() 기능으로 쉽게 대체 할 수 있습니다. 3 개의 개별 배열 (list [0], list [1], list [2])을 전달하고 압축하면 기본적으로 열을 기준으로 요소가 재정렬됩니다. 그래서 [[2 3 4], [1 2 6], [9 8 9]]는 [[2 1 9], [3 2 8], [4 6 9]]가됩니다.

>>> lista = [2,3,4] 
>>> listb = [1,2,6] 
>>> listc = [9,8,9] 
>>> new = zip(lista, listb, listc) 

>>> for row in new: 
...  print(row) 

(2, 1, 9) 
(3, 2, 8) 
(4, 6, 9) 
0

사용 zip()

>>> list(zip(*matrix)) 
[(2, 1, 9), (3, 2, 8), (4, 6, 9)] 
>>> 
+0

zip() 함수가 무엇이고 zip 함수에 대해 * 행렬이 무엇을 설명 할 수 있습니까? –

+0

내 게시물에'zip' 문서에 대한 링크가 포함되어 있습니다. 'matrix'는 예제에서 파일로 생성 한 목록의 목록입니다. '*'는'matrix'에서 * sub * -lists의 압축을 풉니 다. – wwii

-1

다른 더 전통 방법은 중첩 루프를 사용하여 here 특히 행렬 전치을 찾을 수 있습니다.

+1

왜 대답을 코멘트에 도움이되지 언급 downvote Logged – Abhijeetk431