.lower 函数在 lambda 中如何工作?

How does the .lower function works in lambda?

d = ['AAab', 'abc', 'Ejc','badad1']
d.sort(key=lambda s: s.lower())
print(d)

输出为['AAab', 'abc', 'badad1', 'Ejc']

我很困惑我调用了一个较低的函数 为什么它 return 先给我 AAab,然后是 abc,然后是 badad1,然后是 EJC

不应该先returnabc,然后是badad1,然后是AAB,然后是EJC吗?

看起来你想要str.islower:

d.sort(key=lambda s: (not s.islower(), s))
print(d)
# ['abc', 'badad1', 'AAab', 'Ejc']

使用您当前的方法,您只是将所有字符串小写,因此您只是让它们按字母顺序排序。

现在您要根据 islower 返回的布尔值结果和字符串本身(这似乎是您想要的)进行排序:

[(not s.islower(), s) for s in d]
# [(True, 'AAab'), (False, 'abc'), (True, 'Ejc'), (False, 'badad1')]