У меня есть список таких строк:
['Aden', 'abel']
Я хочу отсортировать элементы без учета регистра. Итак, я хочу получить:
['abel', 'Aden']
Но я получаю противоположное с помощью sorted()
или list.sort()
, потому что прописные буквы появляются перед строчными.
Как я могу проигнорировать дело? Я видел решения, которые включают в себя все элементы списка в нижнем регистре, но я не хочу менять регистр элементов списка.
Ответы:
В Python 3.3+ есть
str.casefold
метод, специально разработанный для сопоставления без регистра:В Python 2 используйте
lower()
:Он работает как для обычных строк, так и для строк в Юникоде, поскольку у них обоих есть
lower
метод.В Python 2 он работает с сочетанием обычных строк и строк в Юникоде, поскольку значения двух типов можно сравнивать друг с другом. Однако Python 3 так не работает: вы не можете сравнивать байтовую строку и строку Unicode, поэтому в Python 3 вы должны поступать разумно и сортировать списки только одного типа строки.
источник
str.lower
функцию какsorted(lst, key=str.lower)
или (Python 2), используяlower
методstring
модуля какsorted(lst, key=string.lower)
. Можно также использоватьstr.lower
для строк в Python 2, но тогда придется использоватьunicode.lower
дляunicode
объектов, тогда какstring.lower
принимает оба (что, как вы выразились, вероятно, не совсем «нормальный» режим работы).В Python 3
str
используется unicode, но в Python 2 вы можете использовать этот более общий подход, который работает как для, такstr
и дляunicode
:источник
[['Aden'], ['abel']]
sorted(x,key=lambda i:i[0].lower())
Вы также можете попробовать это, чтобы отсортировать список на месте:
источник
Это работает в Python 3 и не требует перевода результата в нижний регистр (!).
источник
В python3 вы можете использовать
источник
Я сделал это для Python 3.3:
Тогда вы просто можете вызвать эту функцию:
источник
Сортировка без учета регистра, сортировка строки по месту в Python 2 OR 3 (проверено в Python 2.7.17 и Python 3.6.9):
Ключ
key=str.lower
. Вот как эти команды выглядят только с командами, чтобы их можно было легко скопировать и протестировать:Обратите внимание, что если ваши строки являются строками Unicode, однако (например
u'some string'
), то только в Python 2 (НЕ в Python 3 в этом случае) вышеуказаннаяx.sort(key=str.lower)
команда завершится ошибкой и выдаст следующую ошибку:Если вы получаете эту ошибку, либо обновитесь до Python 3, где они обрабатывают сортировку Unicode, либо сначала преобразуйте ваши строки Unicode в строки ASCII, используя понимание списка, например:
Ссылки:
источник
Попробуй это
Вывод
['abel', 'Aden']
источник