2017-03-17 105 views
1

我想訂購清單到幾個月Python列表理解錯誤

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

此功能的作品,但我想用列表的理解,而不是

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

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

輸出 - [「月」,'二月','四月']

我試過這個,但我得到一個語法錯誤,我不知道爲什麼

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

它看起來像你的'if'是放錯了地方:'sorted_ = [月爲月個月,如果在一個月值]' – mgilson

+0

@mgilson生命的救星! –

+0

你實際上並不需要理解......'sorted(values,key = months.index)'。但每個'list.index'調用是O(n) –

回答

1

有兩種不同的方式做在列表解析條件語句,它取決於你是否有一個else條款:

沒有else子句:

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

隨着else子句:

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

注意:這些也可以組合使用:

[x if x.name == z else None for x in y if x is not None] 
[result if conditional2 else alternative for element in list if conditional1] 

這相當於:

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

謝謝!澄清了一些混亂 –

1

試試這個

values = ["Sept","Oct"] 

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

你的列表中理解語法被關了一下。