2016-09-06 9 views
1

Hier ist meine Liste (Listen):Verschachtelte if-Anweisung gibt nichts in der Liste der Listen

mylist = [ [1, "John", None, "Doe"], [2, "Jane", "group1", "Zee"], [3, "Lex", "group2", "Fee"]] 

y = 2 

for sublist in mylist: 
    if sublist[0] == y: # meaning the third list 
     if sublist[2] == None: 
      print(sublist[2]) # this should print nothing 
     else: 
      print(sublist[2]) #this should print something 

Das Endergebnis ist, dass kein Ausdruck für diesen Code.

Ich versuche eine Überprüfung für Situationen durchzuführen, in denen ich einen None Wert in meiner Liste (von Listen) habe. Diese Methode scheint nicht zu funktionieren.

Ich kann nicht herausfinden, warum es überhaupt nichts drucken will, aber ich nehme an, die verschachtelte if sublist[2] == None: kann etwas damit zu tun haben.

+6

Dies druckt "group1" auf meiner Maschine. Verwenden von Python 3.4. –

+3

'sublist [0] == y', da' y = 2', gilt für die * zweite * Liste. –

+1

Ich benutze Python 2.7, Ihr Code druckt 'group1' –

Antwort

4

Ich versuche, einen Scheck für Situationen zu tun, wo ich einen Wert None in meiner Liste haben (Listen)

Dann nur für die Mitgliedschaft überprüfen mit in für jede Unterliste:

for sublist in mylist: 
    if None in sublist: 
     # do your check 
     print("None in list: ", sublist) 

druckt:

None in list: [1, 'John', None, 'Doe'] 

Wenn Sie nur wollen, um zu sehen, wenn ein None im Allgemeinen existiert nur any verwenden:

any(None in sub for sub in mylist) 

die True liefert seit None ist in mylist[0]

+0

danke für Ihre Antwort. – coolpy

2

Ich glaube, ich verstehe, was Sie versuchen zu erreichen. Sie möchten über eine Liste von Listen auflisten, dann überprüfen Sie das y-Feld, um zu sehen, ob es None enthält.

Das Problem Sie konfrontiert sind, ist, dass, wenn Sie tun:

y = 2 

das dritte Feld angibt und später tun Sie:

if sublist[0] == y: 

dann Prüfen Sie, ob die erste Feld (angezeigt von [0]) der sublist ist gleich 2

was bringt Sie auf die dritte Unterliste, nicht das dritte Feld in der Unterlistenaufzählung. Hier geht dein Code schief.

Sie müssen die if sublist[0] == y: vollständig fallen zu lassen, und prüfen Sie einfach sublist[y]

Der folgende Code wird Ihre Liste von Listen aufzählen, dann überprüfen Sie die y ten Feld für None:

mylist = [ [1, "John", None, "Doe"], [2, "Jane", "group1", "Zee"], [3, "Lex", "group2", "Fee"]] 

y = 2 

for sublist in mylist: 
    if sublist[y] == None: 
     print(sublist[y]) # this should print nothing 
    else: 
     print(sublist[y]) #this should print something 

Wenn Sie möchten, zu überprüfen alle Feld enthält None, erhalten Sie etwas wie folgt:

mylist = [ [1, "John", None, "Doe"], [2, "Jane", "group1", "Zee"], [3, "Lex", "group2", "Fee"]] 

for sublist in mylist: 
    for field in sublist: 
     if field == None: 
      print("None detected in: " + str(sublist)) 
+0

danke für Ihre Antwort und detaillierte Erklärung. Ich würde Ihnen eine positive Bewertung geben, aber jemand gab mir einen Downvote und mein Ruf ist wieder unter 15. – coolpy

+0

@coolpy Danke für das Feedback, viel Glück. Du kannst immer versuchen "als Antwort zu markieren" :-) –