【问题标题】:Using lambda function as key in sort使用 lambda 函数作为排序的关键
【发布时间】:2018-12-12 10:43:28
【问题描述】:

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

【问题讨论】:

    标签: python-3.x lambda


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      相关资源
      最近更新 更多