python-3.x - 使用 lambda 函数作为排序的键

标签 python-3.x lambda

有人可以解释一下这段代码是如何工作的吗? 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/

相关文章:

c# - 从 lambda 表达式参数读取和写入模型属性

c# - 使用 .NET 3.5 调用多个表达式

python - 将文本字段转换为字典

python - 在 python 3 中将字节解码为字符串或 ASCII 的问题

python - Canopy 与命令行中运行脚本的区别

java - 如何修复使用 lambda 和条件从列表中删除重复项

python - python 2.7 中的 super

python - 检测单个字符串分数(例如 : ½ ) and change it to longer string?

c++ - 无法将 QStringList 从 lambda 返回到函数中

Java 8. 使用收集器将值列表分组到范围列表中