Как проще всего сравнивать строки в Python без учета регистра?
Конечно, можно сделать (str1.lower () ‹= str2.lower ()) и т. Д., Но это создало две дополнительные временные строки (с очевидными накладными расходами alloc / g-c).
Думаю, я ищу эквивалент функции stricmp () в C.
[Требуется еще немного контекста, поэтому я продемонстрирую тривиальный пример:]
Предположим, вы хотите отсортировать длинный список строк. Вы просто выполняете theList.sort (). Это сравнение строк O (n * log (n)) без управления памятью (поскольку все строки и элементы списка являются своего рода интеллектуальными указателями). Вы счастливы.
Теперь вы хотите сделать то же самое, но не обращайте внимания на регистр (давайте упростим и скажем, что все строки - это ascii, поэтому проблемы с языковым стандартом можно игнорировать). Вы можете выполнить theList.sort (key = lambda s: s.lower ()), но тогда вы вызываете два новых выделения для каждого сравнения, а также загружаете сборщик мусора дублированными (пониженными) строками. Каждый такой шум управления памятью на порядки медленнее, чем простое сравнение строк.
Теперь с помощью функции, аналогичной stricmp (), вы выполняете: theList.sort (cmp = stricmp), и это так же быстро и удобно для памяти, как theList.sort (). Вы снова счастливы.
Проблема в том, что любое сравнение на основе Python без учета регистра включает неявное дублирование строк, поэтому я ожидал найти сравнения на основе C (возможно, в строке модуля).
Ничего подобного найти не удалось, отсюда и вопрос. (Надеюсь, это проясняет вопрос).
Ignore case in python strings
наWhat's closest to stricmp in Python for 7-bit ascii string comparison?
, чтобы более точно отразить фактический вопрос оператора. основная проблема: unicode также является "строкой", но этот вопрос может полностью ошибиться; см. комментарии tchrist - person n611x007   schedule 15.04.2014