有人可以解释一下这段代码是如何工作的吗? lambda函数中的isinstance函数如何对列表进行排序
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 函数创建 bool 值和原始值本身的元组。因此 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']
关于python-3.x - 使用 lambda 函数作为排序的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53741244/