2017-01-16 1 views
3

so habe ich Probleme haben zu überprüfen, ob die Nummer 0 in einer Gruppe von Listen innerhalb einer anderen Liste ist. Diese Reihen bilden das Labyrinth für ein pacmanartiges Spiel, das ich mache, damit der Punkt ist, zu überprüfen, ob Pacman alle Münzen gegessen hat.Wie überprüft man, ob eine Nummer in einer Liste von Listen ist?

Hier ist mein Code:

row1 =[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3] 
row2 =[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 
row3 =[1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1] 
row4 =[1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1] 
row5 =[1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1] 
row6 =[1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1] 
row7 =[1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1] 
row8 =[1,0,0,0,0,1,0,1,1,1,1,1,0,1,0,0,0,0,1] 
row9 =[1,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1,1,1,1] 
row10=[3,3,3,1,0,1,1,1,0,1,0,1,1,1,0,1,3,3,3] 
row11=[3,3,3,1,0,1,0,0,0,0,0,0,0,1,0,1,3,3,3] 
row12=[3,3,3,1,0,1,0,1,4,4,4,1,0,1,0,1,3,3,3] 
row13=[1,1,1,1,0,1,0,1,3,3,3,1,0,1,0,1,1,1,1] 
row14=[3,3,3,3,0,0,0,1,3,3,3,1,0,0,0,3,3,3,3] 
row15=[1,1,1,1,0,1,0,1,5,5,5,1,0,1,0,1,1,1,1] 
row16=[3,3,3,1,0,1,0,3,3,3,3,3,0,1,0,1,3,3,3] 
row17=[3,3,3,1,0,1,0,1,1,1,1,1,0,1,0,1,3,3,3] 
row18=[3,3,3,1,0,1,0,1,1,1,1,1,0,1,0,1,3,3,3] 
row19=[1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1] 
row20=[1,0,0,0,0,1,1,1,0,1,0,1,1,1,0,0,0,0,1] 
row21=[1,0,1,1,0,0,0,0,0,3,0,0,0,0,0,1,1,0,1] 
row22=[1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1] 
row23=[1,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,1] 
row24=[1,0,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1] 
row25=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1] 
row26=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 

maze = [row1,row2,row3,row4,row5,row6,row7,row8,row9,row10,row11,row12, 
     row13,row14,row15,row16,row17,row18,row19,row20,row21,row22, 
     row23,row24,row25,row26] 

So habe ich versucht, if 0 not in maze: Aber die if-Anweisung wird ausgeführt, ob 0 in (Labyrinth) ist oder nicht.

Jede Hilfe wäre dankbar, danke.

+0

'keine (el == 0 für Unterliste in Labyrinth für EL in Unterliste)' –

+0

@DYZ Scheint ziemlich klar für mich. Die Nummer ist "0". –

+0

@leaf Der Titel sagt "Nummer", nicht 0. Nicht klar für mich. – DyZ

Antwort

7

Sie werden in maze durch jede Liste Schleife haben und prüfen, ob es eine 0 ist oder nicht:

if not any(0 in i for i in maze): 
    ... 

Die große Sache über die any() Funktion ist, dass es Schleifen maze stoppt, sobald es eine findet, 0.

0

Schleife durch die Unterliste. Verwenden Sie auch any()

if any(0 in sublist for sublist in maze) 

Es wird geprüft, ob es eine 0 in der Liste ist

1

Mit Ihrem ersten Versuch, Ihre einzige Prüfung für 0 in der Top-Level-Liste. Natürlich enthält die Top-Level-Liste nur Listen, daher schlägt Ihr Test fehl.

Sie müssen jede Unterliste in maze durchlaufen. Sie könnten eine manuell for-Schleife verwenden, die eine gültige Option ist:

def has_zero(maze): 
    for sublist in maze: 
     for el in sublist: 
      if el == 0: 
       return True 
    return False 

aber Python bietet eine bessere Art und Weise mit der any() Funktion (die im Grunde eine bessere Umsetzung der obigen Funktion ist):

Gibt True zurück, wenn ein Element des Iterablen Wahr ist. Wenn das iterable leer ist, gebe False zurück [...].

Aber auch die not Operator verwenden müssen (bekannt als ! in anderen Sprachen) zu negate die möglicherweise wahren Wert any() zurückzukehren. Somit würde die vollständige Lösung sein:

not any(el == 0 for sublist in maze for el in sublist) 
-1

solange ich verstehe Ihr Problem Sie den folgenden Code verwenden:

a = [1,1,1] 
b = [1,0,1] 
c = [0,1,2] 
d = [a,b,c] 

for i in d:  
    if i.__contains__(0): 
    print("yes") 
+0

Sie sollten fast nie "__contains__" oder irgendetwas anderes in doppelte Unterstriche in Ihrem Code eingeschlossen. – DyZ

+0

@DYZ Alles klar, ich werde meinen vorherigen Kommentar löschen. –

+0

danke für den Rat, ich bin alles neue hier wird es überprüfen –

1

any wurde bereits erwähnt, aber man könnte auch Ihre Listen (zB abflachen mit itertools.chain.from_iterable) und prüfen, ob der Artikel enthalten ist:

from itertools import chain 

if 0 in chain.from_iterable(lst): 
    # do something 

wie any diese stoppt, sobald eine gefunden wird. Nur um es zu erwähnen, weil es etwas ist, das oft übersehen wird: Generatoren und Iteratoren (wie chain) unterstützen im Allgemeinen den Operator in.

Verwandte Themen