有人可以解释一下此代码如何工作。 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']
答案 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']