Tengo una variable s que contiene una cadena de una letra
s = 'a'
Dependiendo del valor de esa variable, quiero devolver cosas diferentes. Hasta ahora estoy haciendo algo como esto:
if s == 'a' or s == 'b': return 1 elif s == 'c' or s == 'd': return 2 else: return 3
¿Hay una mejor manera de escribir esto? ¿Una forma más pythonica? ¿O es este el más eficiente?
Anteriormente, incorrectamente tuve algo como esto:
if s == 'a' or 'b': ...
Obviamente eso no funciona y fue bastante tonto de mi parte.
Sé de asignación condicional y he intentado esto:
return 1 if s == 'a' or s == 'b' ...
Supongo que mi pregunta es específicamente si existe una forma de comparar una variable con dos valores sin tener que escribir something == something or something == something
if s in ('a', 'b'): return 1 elif s in ('c', 'd'): return 2 else: return 3
d = {'a':1, 'b':1, 'c':2, 'd':2} return d.get(s, 3)
Si solo devuelve valores fijos, un diccionario es probablemente el mejor enfoque.
if s in 'ab': return 1 elif s in 'cd': return 2 else: return 3
return 1 if (x in 'ab') else 2 if (x in 'cd') else 3
Tal vez un poco más de auto-documentación utilizando si otra cosa:
d = {'a':1, 'b':1, 'c':2, 'd':2} ## good choice is to replace case with dict when possible return d[s] if s in d else 3
También es posible implementar la primera respuesta popular con si:
return (1 if s in ('a', 'b') else (2 if s in ('c','d') else 3))