2017-01-12 6 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]]) 

Derzeit gibt [1,4,7] Gewünschtes Ergebnis [[1,4,7], [2,5,8], [3,6,9]]Warum endet meine while-Schleife nach einer Runde?

+0

'Return' endet Funktion - Sie müssen' Return' nach 'while' Schleife verwenden. – furas

+0

Weil Sie es so codiert haben - Sie durchlaufen die Anweisungen in der Schleife und die letzte Anweisung ist 'return'. – MattDMo

+0

Das Ergebnis, das ich erhalte, ist nur [1, 4, 7, 2, 5, 8, 3, 6, 9]. –

Antwort

6

Sie haben eine return Anweisung innerhalb Ihrer while, so dass die Funktion zurückkehrt, sobald sie diesen Punkt erreicht. Sie sollten Dedent Ihre Rückkehr auf das gleiche Niveau wie die während:

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

Sie könnten auch die while-Schleife und Zähler n mit einer for-Schleife ersetzen, dass Iterierten auf range(len(matrix)) so können Sie sicher n verwerfen, und dann bewegen die Initialisierung von li außerhalb der Schleife:

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 

ich schlage vor, Sie das beliebte Rezept nehmen Matrizen für die Umsetzung des Code sauberer zu machen:

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

Das Ergebnis, das ich erhalte, ist nur [1, 4, 7, 2, 5, 8, 3, 6, 9]. –

+0

Ich habe meine Antwort mit einem Fix für Ihren ursprünglichen Code aktualisiert –

+1

Vielen Dank für Ihre Hilfe geschafft, es mit meiner While-Schleife zu arbeiten. Ich schätze Ihre Hilfe! –

1

Einrückungen Angelegenheiten. Zusätzlich wurde die Liste li am falschen Ort initialisiert.

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

Das Ergebnis, das ich erhalte, ist nur [1, 4, 7, 2, 5, 8, 3, 6, 9]. –

1

Ich nehme an, Sie wissen das, aber nur für den Fall, kann dies mit numpy erreicht werden

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

Ihr erster Fehler ist die gegliederte return. Die zweite ist 0 anstelle n innerhalb . Die dritte überschreibt den Wert von li in jeder while-Schleife. Dies ist, wie es funktioniert:

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

Mach dir keine Sorgen. Sie werden schneller und weniger fehleranfällig werden sehr schnell, wenn Sie neugierig sind und Dinge ausprobieren :)