有时候需要对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相关的玩法,花样太多了,不过复杂了感觉可读性不够好,就记录一下这一个点吧。