使用lambda函数作为排序键

时间:2018-12-12 10:43:29

标签: python-3.x lambda

有人可以解释一下此代码如何工作。 lambda函数中的isisnstance函数如何对列表进行排序

def db_sort(arr):
    return sorted(arr, key=lambda x: (isinstance(x,str) ,x))
db_sort(['a', 'w', 'u', 'y', 6, 2, 3, 4, 5])

输出:

  

[2,3,4,5,6,'a','u','w','y']

1 个答案:

答案 0 :(得分:3)

lambda函数创建布尔值和原始值本身的元组。因此,sorted应用于以下输入:

(True, 'a') (True, 'w') (True, 'u') (True, 'y') (False, 6) (False, 2) (False, 3) (False, 4) (False, 5)

它首先放置带有False条目的条目,然后放置True元素(在此示例中为字符串)。然后,它在第二个元组条目之后以逻辑顺序对False元素进行排序,并且也以逻辑顺序对True元素进行排序。将其视为一种分层排序。

所以你最终会得到

(False, 6) (False, 2) (False, 3) (False, 4) (False, 5) (True, 'a') (True, 'w') (True, 'u') (True, 'y')

在第一级排序之后,并使用

(False, 2) (False, 3) (False, 4) (False, 5) (False, 6) (True, 'a') (True, 'u') (True, 'w') (True, 'y')

第二级之后。这样,您就可以得到数组的最终顺序(我想您是偶然地错过了6)。

[2, 3, 4, 5, 6, 'a', 'u', 'w', 'y']