Python 3.x 使用lambda函数作为排序键

Python 3.x 使用lambda函数作为排序键,python-3.x,lambda,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'] lambda函数创建布尔值和原始值本身的元组。因此,sorted应用于以下输入:

有人能解释一下这个代码是如何工作的吗。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']


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']