2017-01-12 4 views
0
def transpose(matrix): 
    n=0 
    while n < (len(matrix)): 
     li = [] 
     for sets in matrix: 
      li.append(sets[0]) 
     n += 1 
     print(len(matrix)) 
     return li 
transpose([[1,2,3],[4,5,6],[7,8,9]]) 

現在返す[1,4,7] 募集結果[[1,4,7]、[2,5,8-]、[3,6,9]]なぜ私のwhileループは1回の実行の後に終了するのですか?

+0

'return' ends関数 - ' while'ループの後に 'return'を使う必要があります。 – furas

+0

それはあなたがそれをどのようにコード化したかである - あなたはループ内の命令を実行し、最後のステートメントは 'return'です。 – MattDMo

+0

私が受け取った結果はちょうど[1,4,7,2,5,8,3,6,9]です。 –

答えて

6

あなたがreturnを持っていますあなたのwhile文の中にあるので、関数はその点に到達すると関数を返します。

def transpose(matrix): 
    n = 0 
    li = [] 
    while n < (len(matrix)): 
     ... 
    return li 

あなたはまた、range(len(matrix))の繰り返し処理はそうあなたが安全にnを破棄できるというforループとwhileループとカウンターnを交換した後、移動ができます:あなたはDEDENT中と同じレベルにあなたのリターンがすべきループの外側liの初期化:

def transpose(matrix): 
    li = [] 
    for i in range(len(matrix)): 
     inner_li = [] 
     for sets in matrix: 
      inner_li.append(sets[i]) 
     li.append(inner_li) 
    return li 

私はあなたのコードのクリーナーを作るために行列を転置のための人気のレシピを採用示唆しますの

def transpose(matrix): 
    return list(zip(*matrix)) 

>>> transpose([[1,2,3],[4,5,6],[7,8,9]]) 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 
+0

私が受け取った結果はちょうど[1,4,7,2,5,8,3,6,9]です。 –

+0

元のコードの修正で自分の回答を更新しました –

+1

あなたの助けを借りてくれたことがありました。私はあなたの助けに感謝します! –

1

インデントの問題。さらにリストliが間違った場所で初期化されていました。

def transpose(matrix): 
    n=0 
    li = [] 

    while n < (len(matrix)): 
     for sets in matrix: 
      li.append(sets[0]) 
     n += 1 
     print(len(matrix)) 
    return li 
+0

私が受け取った結果はちょうど[1,4,7,2,5,8,3,6,9]です。 –

1

私はあなたがこれを知っていると仮定しますが、念のために、これはあなたの最初の間違いはインデントreturnあるnumpyの

import numpy as np 
A = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
print A.T 
0

を用いて達成することができます。 nの代わりに0があり、sets[...]の範囲にあります。 3つ目はwhileループごとにliの値を上書きしています。 これは、それがどのように動作するかです:

def transpose(matrix): 
    n=0 
    li = [] 
    while n < (len(matrix)): 
     li.append([]) 
     for sets in matrix: 
      li[-1].append(sets[n]) 
     n += 1 
     print li 
    return li 


transpose([[1,2,3],[4,5,6],[7,8,9]]) 

それについては心配しないでください。あなたが好奇心があり、物事を試してみると、速くなり、エラーを起こしにくくなります:)

関連する問題