usar switch sino implementar condicional como anidado python loops

switch - Python: compruebe si el valor está en una lista sin importar el CaSE



switch if python (5)

Quiero verificar si un valor está en una lista, sin importar cuál sea el caso de las letras, y debo hacerlo de manera eficiente.

Esto es lo que tengo:

if val in list:

Pero quiero que ignore el caso


Puede bajar los valores y verificarlos:

>>> val ''CaSe'' >>> l [''caSe'', ''bar''] >>> val in l False >>> val.lower() in (i.lower() for i in l) True


Si realmente tiene solo una lista de los valores, lo mejor que puede hacer es algo así como

if val.lower() in [x.lower() for x in list]: ...

pero probablemente sería mejor mantener, por ejemplo, un set o dict cuyas claves son versiones en minúsculas de los valores en la lista; de esa manera no necesitará seguir iterando (potencialmente) toda la lista.

Por cierto, usar list como nombre de variable es estilo pobre, porque list es también el nombre de uno de los tipos incorporados de Python. Es probable que intentes llamar a la función integrada de la list (que convierte las cosas en listas) y te confundas porque tu variable de list no se puede llamar. O, por el contrario, tratando de usar su variable de list algún lugar donde esté fuera del alcance y confundirse porque no puede indexar en la list integrada.


Si sabes que tus valores son todos de tipo str o unicode , puedes probar esto:

if val in map(str.lower, list): ...Or: if val in map(unicode.lower, list):


check = "asdf" checkLower = check.lower() print any(checkLower == val.lower() for val in ["qwert", "AsDf"]) # prints true

Usando la función any () Este método es bueno porque no está recreando la lista para que tenga minúsculas, se itera sobre la lista, por lo que una vez que encuentra un valor verdadero, deja de iterar y regresa.

Demostración: http://codepad.org/dH5DSGLP


items = [''asdf'', ''Asdf'', ''asdF'', ''asjdflk'', ''asjdklflf''] itemset = set(i.lower() for i in items) val = ''ASDF'' if val.lower() in itemset: # O(1) print(''wherever you go, there you are'')