В настоящее время я работаю с функцией .lower (), просто не хочу задавать небольшую проблему, и это объяснение. - PullRequest
0 голосов
/ 26 апреля 2020
d = ['AAab', 'abc', 'Ejc','badad1']
d.sort(key=lambda s: s.lower())
print(d)

вывод равен ['AAab', 'abc', 'badad1', 'Ejc']

Я запутался, что вызвал функцию более низкого уровня, почему он сначала возвращает мне AAab, затем ab c, затем badad1 и затем EJ C

Если он не вернет сначала ab c, затем badad1, затем AAB, затем EJ C?

1 Ответ

2 голосов
/ 26 апреля 2020

Похоже, что вы хотите 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')]
...