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