¿Cuál es la forma más fácil de comparar cadenas en Python, ignorando mayúsculas y minúsculas?Ignorar mayúsculas y minúsculas en Python Strings
Por supuesto que se puede hacer (str1.lower() < = str2.lower()), etc., pero esto creó dos cadenas temporales adicionales (con los obvios gastos generales de alloc/g-c).
Supongo que estoy buscando un equivalente a C stricmp().
[Algunos contexto más solicitados, por lo que voy a demostrar con un ejemplo trivial:]
Supongamos que desea ordenar una lista de cadenas looong. Simplemente haces theList.sort(). Esto es O (n * log (n)) comparaciones de cadenas y ninguna gestión de memoria (ya que todas las cadenas y los elementos de lista son algún tipo de punteros inteligentes). Usted es feliz.
Ahora, quiere hacer lo mismo, pero ignore el caso (simplifiquemos y digamos todas las cadenas son ascii, por lo que los problemas de configuración regional se pueden ignorar). Puede hacer theList.sort (clave = lambda s: s.lower()), pero luego ocasiona dos nuevas asignaciones por comparación, además de cargar al recolector de basura con las cadenas duplicadas (bajado). Cada uno de esos ruidos de gestión de memoria es de órdenes de magnitud más lentos que la simple comparación de cadenas.
Ahora, con una función similar a stricmp in situ(), lo hace: theList.sort (cmp = stricmp) y es tan rápido y tan fácil de usar como theList.sort(). Eres feliz de nuevo.
El problema es que cualquier comparación insensible a mayúsculas o minúsculas basada en Python implica implícita cadena duplicaciones, por lo que esperaba encontrar una comparación basada en C (tal vez en cadena de módulo).
No se pudo encontrar nada de eso, de ahí la pregunta aquí. (Espero que esto aclare la pregunta).
PHP equivalente: strcasecmp - http://nl3.php.net/strcasecmp – fijter
sus suposiciones son incorrectas. list.sort() con una clave = does _not_ significa "dos nuevas asignaciones por comparación". (list.sort con cmp =, por otro lado _does_ llama al argumento para cada comparación) – hop
intentado cambiar el nombre de la pregunta de 'Ignorar caso en cadenas de python' a' Lo más cercano a stricmp en Python para comparación de cadena ascii de 7 bits ? 'para reflejar con mayor precisión la pregunta real de la operación. problema principal: unicode también es 'cadena', pero esta pregunta los haría * totalmente * incorrectos; ver los comentarios de tchrist – n611x007