【问题标题】:Python sorted lambda function returning a booleanPython 排序的 lambda 函数返回一个布尔值
【发布时间】:2020-11-15 21:03:13
【问题描述】:

所以,我有一个名称列表,我正在尝试对列表进行排序,以使以元音开头的名称首先位于列表中,然后定位那些不以元音开头的名称在它们之后并按字母顺序排序。

为此,我编写了以下代码,但是结果不是我所期望的:

a = ["anna", "ollie", "tim", "bob", "trevor", "susan"]
print(sorted(a, key=lambda x: (x[0] in 'aeiou', x)))

结果:

['bob', 'susan', 'tim', 'trevor', 'anna', 'ollie']

我认为根据我的代码,名称:“anna”和“ollie”应该首先定位,然后是其余名称,因为这两个名称将在我的 lambda 函数的第一部分返回 true。

如果有人能解释为什么我会得到这个结果以及我需要做什么才能得到我想要的结果,我将不胜感激。

谢谢!!

【问题讨论】:

    标签: python sorting lambda


    【解决方案1】:

    原因是:

    x[0] in 'aeiou' 
    

    ['anna', 'ollie'] 返回 1(或 True),其余为 0(或 False)。所以 0

    改为这样做:

    print(sorted(a, key=lambda x: (x[0] not in 'aeiou', x)))
    

    输出

    ['anna', 'ollie', 'bob', 'susan', 'tim', 'trevor']
    

    对于比较的解释,检查documentation,下面的引用来自那里:

    元组和列表使用比较的字典顺序进行比较 对应的元素。这意味着要比较相等,每个元素 必须比较相等并且两个序列必须是相同的类型并且 长度相同。

    对于我建议的布尔值的行为,以下link,引用:

    布尔值是两个常量对象 False 和 True。他们是 用于表示真值(虽然其他值也可以 被认为是假的或真的)。在数字上下文中(例如在使用时 作为算术运算符的参数),它们的行为类似于 分别为整数 0 和 1。

    【讨论】:

      【解决方案2】:

      当你返回一个布尔值时,在 python 中它对应于True == 1False == 0。所以现在当你对你的数组进行排序时,0 小于 1。这就是为什么你将“anna”和“ollie”放在最后,其余的名字放在第一位。

      【讨论】:

        猜你喜欢
        • 2011-12-14
        • 2021-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 2021-10-29
        相关资源
        最近更新 更多