2017-03-17 103 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] 

你的列表中理解语法被关了一下。