2017-06-15 3 views
0

Python Newbie hier. Ich Validierung die Zeilen und Spalten in einem Quadrat, durch eine verschachtelte Liste wie unten dargestellt:Wie erstelle ich eine Spalte aus einer verschachtelten Liste?

[[1,2,3], 
[2,3,1] 
[3,1,2]] 

Die Zeilen und Spalten gültig sind, wenn sie nur einmal 1 bis n mal erscheinen. Wenn zum Beispiel die verschachtelte Liste die Länge 3 hat, sollten die Zahlen 1, 2 und 3 einmal in allen Zeilen und einmal in allen Spalten erscheinen, damit sie gültig sind. Ich überprüfe die Zeilen und verstehe, wie das funktioniert. Unten habe ich eine Methode namens check_sequence definiert, wenn die Nummer 1 überprüft, um n nur einmal in der Liste angezeigt und die get_rows Methode ruft alle Zeilen in der Liste und prüft sie gegen check_sequence:

def check_sequence(mylist): 
    for x in range(1, len(mylist)+1): 
     print "x:" + ' ' + str(x) 
     if x not in mylist: 
      print "False" 
      return False 
     else: 
      print "True" 


def check_row(mylist): 
    for row in mylist: 
     print row 
     if check_sequence(row) is False: 
      print "This is False" 
      return False 
    print "This is True" 
    return True 

Was ich don verstehe nicht, wie man die Spalten im Quadrat mit for-Schleifen überprüft. So zum Beispiel, wenn wir den gleichen Platz wie oben:

[[1,2,3], 
[2,3,1] 
[3,1,2]] 

Die erste Spalte enthält 1,2 und 3, die zweite Spalte enthält 2,3 und 1. Ich bin verwirrt, wie ich würde sammeln diese nummerieren zusammen in einer Spalte und überprüfen sie gegen meine Methode check_sequence?

Antwort

0

Um die i -te Spalte einer Liste von Listen zu erhalten, können Sie Liste Verständnis verwenden:

def check_row(mylist): 
    for row in mylist: 
     print row 
     if check_sequence(row) is False: 
      print "This is False" 
      return False 
    for i in len(mylist): print row if check_sequence([ row[i] for row in mylist ]) is False: print "This is False" return False 
    print "This is True" 
    return True
:

column_i = [ row[i] for row in matrix ] 

Also dann Prüfcodes sein sollte

Sie können jedoch auch zip(..) verwenden, um die Liste der Listen in eine Liste von Tupeln zu transponieren:

def check_row(mylist): 
    for row in mylist: 
     print row 
     if check_sequence(row) is False: 
      print "This is False" 
      return False 
    for col in zip(*mylist): print col if check_sequence(col) is False: print "This is False" return False 
    print "This is True" 
    return True
+0

Vielen Dank für Ihre Lösung! – johnnewbie25

Verwandte Themen