Python排序的lambda函数返回布尔值



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

为了做到这一点,我写了以下代码,然而,结果并不是我所期望的:

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。

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

谢谢!!

原因是:

x[0] in 'aeiou' 

['anna', 'ollie']返回1(或True(,其余返回0(或False(;1,因此输出。

改为:

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

输出

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

关于比较中的解释,请查看文档,下面的报价来自

元组和列表使用相应的元素。这意味着要比较相等,每个元素必须比较相等,并且两个序列的类型必须相同,并且具有相同的长度。

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

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

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

最新更新