Верхний регистр и нижний регистр python

У меня есть список, содержащий список имен животных. Мне нужно отсортировать список. Если я использую sort (list), сначала будет выводиться вывод в верхнем регистре, а затем строчный. Но мне нужен результат ниже.

Input:

 var=['ant','bat','cat','Bat','Lion','Goat','Cat','Ant']

Вывод:

['ant', 'Ant', 'bat', 'Bat', 'cat', 'Cat', 'Goat', 'Lion']

Ответы

Ответ 1

Метод sort() и функция sorted() принимают ключевой аргумент:

var.sort(key=lambda v: v.upper())

Функция, названная в key, вызывается для каждого значения, а возвращаемое значение используется при сортировке, не влияя на фактические значения:

>>> var=['ant','bat','cat','Bat','Lion','Goat','Cat','Ant']
>>> sorted(var, key=lambda v: v.upper())
['ant', 'Ant', 'bat', 'Bat', 'cat', 'Cat', 'Goat', 'Lion']

Чтобы отсортировать Ant до Ant, вам нужно будет добавить немного больше информации в ключ, так что в противном случае равные значения сортируются в заданном порядке:

>>> sorted(var, key=lambda v: (v.upper(), v[0].islower()))
['Ant', 'ant', 'Bat', 'bat', 'Cat', 'cat', 'Goat', 'Lion']

Более сложный ключ генерирует ('ANT', False) для Ant и ('ANT', True) для Ant; True сортируется после False, и поэтому слова с верхним регистром сортируются до их младшего эквивалента.

Подробнее см. POWON sorting HOWTO.