【问题标题】:Understanding how list.sort() is working with a lambda [duplicate]了解 list.sort() 如何使用 lambda [重复]
【发布时间】:2020-05-02 17:52:28
【问题描述】:

所以我想知道 sort() 方法是如何对以下列表中的项目进行排序的:

scores = [('COLIN', 58), ('AMANDBA', 172), ('AMANDAB', 172), ('CAROL', 270), ('PauL', 108), ('JOSEPH', 79)]

这是我开始感到困惑的地方:

scores.sort(key=lambda x: (-x[1],x[0]))

因此,根据我的理解,lambda 的基本作用是告诉 .sort() 对其进行排序...作为示例,我将从分数 ('COLIN', 58) 中获取第一项,以及我认为 lambda 正在做什么每个项目:('COLIN', 58) ---> (-58, 'COLIN')。如果我是对的并且这就是 .sort() 用作键的内容,那么 sort 方法对其进行排序的步骤是什么? 需要注意的重要一点是,这个以 lambda 为键的 .sort() 对项目进行排序,最终结果为:

[('CAROL', 270), ('AMANDAB', 172), ('AMANDBA', 172), ('PauL', 108), ('JOSEPH', 79), ('COLIN', 58)]

这意味着它也会按字母顺序对具有相同编号的项目进行排序:

('AMANDAB', 172), ('AMANDBA', 172)

排序列表的最终结果按上述顺序排序,即使它们具有相同的数字,它们也按字母顺序排序。我对那个 lambda 是如何做到的感到迷茫。请有人解释一下它是做什么的,可以按数字排序,也可以按字母顺序排序具有相同数字的数字,可能吗?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    元组按字典顺序排序,即。类似于字符串 - 按第一个元素,如果第一个元素相等,则按第二个元素等。因此按(-x[1], x[0]) 排序首先按-x[1] 排序(- 获得相反的顺序),但如果x[1] 相同,则x[0] 决定。

    【讨论】:

    • 哦,如果数字相等,那么它会检查字符串吗?并在字符串中比较字母?
    • 正是如此(考虑大写字母,可能有点违反直觉,比小写小,所以'A' < 'a')。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2012-11-15
    • 2020-07-28
    • 2018-02-01
    • 2019-06-20
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多