python sorted排序中的lambda

有时候需要对list进行多条件排序,
比如lst = [-22, 1, 4 , 3, 8, -5, 11, 12, -4, 13, 1, 24, -9],
要求:1.负数在正数前,2.偶数在奇数前.条件1优先于条件2。
我本能的写出
lst = [-22, 1, 4 , 3, 8, -5, 11, 12, -4, 13, 1, 24, -9]
a = sorted(lst, key=lambda x: x % 2==0, reverse=True) 
a
= sorted(a, key=lambda x: x < 0, reverse=True)
print(a) # [-22, -4, -5, -9, 4, 8, 12, 24, 1, 3, 11, 13, 1]
之后发现竟然可以这么写
a = sorted(lst, key=lambda x: (x < 0, x % 2 == 0), reverse=True)

根据 lambda_expr ::= "lambda" [parameter_list] ":" expression

与以下函数类似

def <lambda>(parameters):
    return expression
def foo(x):
return x < 0, x % 2 == 0

所以一可以写成
sorted(lst, key=foo, reverse=True)

最后看了一下lambda相关的玩法,花样太多了,不过复杂了感觉可读性不够好,就记录一下这一个点吧。



 
posted @ 2015-12-13 18:49  Jeff_blog  阅读(868)  评论(0编辑  收藏  举报