Функция key
вызывается для каждого элемента списка, и возвращаемое ею значение используется в качестве «ключа» сортировки (т. Е. Как значение сравнения вместо фактических элементов списка).
Ваша функция сортировки эквивалентна:
def sort_key(x: str) -> Tuple[bool, bool, bool, bool, str]:
return (
x.isdigit() and int(x) % 2 == 0,
x.isdigit(),
x.isupper(),
x.islower(),
x
)
(расширена до функции def
с аннотациями типов, чтобы мы могли лучше видеть, что она возвращает)
Итак, я могу сделать вывод, что ваш список струн; функция ключа сортировки возвращает кортеж с четырьмя значениями типа bool, которые сообщают нам различные свойства этих строк как значения True / False.
- Это четное число.
- Это любой вид число.
- Все в верхнем регистре.
- Все в нижнем регистре.
И пятое значение - это сама строка (которая будет отсортирована по алфавиту). При сравнении кортежей сначала сравнивается первое значение, затем второе, et c. При сравнении значений типа bool False
предшествует True
. Таким образом, отсортированный список будет сгруппирован по указанным выше четырем категориям в указанном порядке; сначала будут сгруппированы четные числа (в конце списка, потому что True
следует за False
), затем нечетные числа, затем строки в верхнем регистре, затем строки в нижнем регистре, а затем все остальное. Внутри этих категорий сортировка будет происходить по порядку строк (лексикографически).