2017-11-24 5 views
0

私のコードは以下を実行します。私matrix.txtファイルは、[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] [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に変わるはずです。" –

+0

はいいいえ、それは3から1に変わるはずです。ちょっとタイプミスです。そして私の質問は、最終出力を得ることができないので、スワップアルゴリズムを修正する方法です。 –

答えて

0

FYI、これはかなり簡単にzip()関数に置き換えることができました。 3つの別々の配列(リスト[0]、リスト[1]、リスト[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のときに答えが役に立たない理由を述べてください – Abhijeetk431

関連する問題