眼眸繁星
sorted(test2, key=lambda x: (isinstance(x, str), x))这依赖于False < True元组按字典顺序排序的事实。更多细节:元组通常用于按多个指标进行排序。考虑一下:key=lambda x: isinstance(x, str)该key关键字参数来sorted告诉它由给定的调用,而不是由vaules自己的结果值进行排序。此键将返回False整数和True字符串。由于False相当于0和Trueto1,False被认为更小,所有整数将在列表中排在第一位。这只是我们想要的一半,因为整数和字符串之间没有排序。这是元组进来的。上面的关键功能:key=lambda x: (isinstance(x, str), x)为每个元素返回一个元组。元组首先按它们的第一个元素排序。如果两个元组具有等效的第一个元素,则比较它们的第二个元素,依此类推。这称为词典排序。假设我们有这个列表:this = ["a", 5, "b", 3]key 函数将按顺序返回:(True, "a"), (False, 5), (True, "b"), (False, 3)元组将首先按它们的第一个元素(布尔值)排序:(False, 5), (False, 3), (True, "a"), (True, "b")现在,我们有两对元组,它们的第一个元素相等。每对将按其第二个元素在内部排序:(False, 3), (False, 5), (True, "a"), (True, "b")最终结果不是元组本身,而是每个元组的关键函数的相应输入:[3, 5, "a", "b"]实际上,该算法不需要“两次”排序,但概念上是相同的。