2017-03-17 4 views
1

Ich möchte eine Liste in Monaten bestellenPython Liste Verständnis Fehler

months = ["Jan", "Feb", "March", "April", 
      "May", "June", "July", "Aug", 
      "Sept", "Oct", "Nov", "Dec"] 

Diese Funktion funktioniert, aber ich möchte Liste Verständnis verwenden, anstatt

def order(values): 
    sorted = [] 
    for month in months: 
     if month in values: 
      sorted_.append(month) 
    return sorted_ 

order(["April","Jan", "Feb"] 

Ausgang - [ ‚Jan‘, ' Februar ‚‘,‘April]

ich habe versucht, dies aber ich einen Syntaxfehler bekommen, und ich bin nicht sicher, warum

sorted_ = [month if month in values for month in months] 
+1

Es sieht aus wie Ihre 'if' ist an der falschen Stelle:' sorted_ = [Monat für Monat in Monaten, wenn Monat in Werten] ' – mgilson

+0

@mgilson Lebensretter! –

+0

Sie brauchen dazu eigentlich kein Verständnis ... 'sortiert (Werte, Schlüssel = Monate.index)'. Aber jeder 'list.index' Aufruf ist O (n) –

Antwort

1

Es gibt zwei verschiedene Arten conditionals in Listenkomprehensionen zu tun, und es hängt davon ab, ob Sie eine else Klausel:

Ohne else-Klausel:

[x for x in y if x == z] 
[result for element in list if conditional] 

Mit else-Klausel:

[x if x == z else -x for x in y] 
[result if conditional else alternative for element in list] 

Hinweis: Diese können auch kombiniert werden:

der entspricht:

total_result = [] 
for x in y: 
    if conditional1: 
     if conditional2: 
      total_result.append(result) 
     else: 
      total_result.append(alternative) 
+0

Danke! Habe ein paar Verwirrungen gemacht –

1

diese

values = ["Sept","Oct"] 

sorted_ = [month for month in months if month in values] 

Ihre Liste Verständnis Syntax Versuchen off ein wenig war.

Verwandte Themen