2008-09-29 9 views
5

Al usar las declaraciones IF en Python, debe hacer lo siguiente para que la "cascada" funcione correctamente.Uso de las comparaciones O con las declaraciones IF

if job == "mechanic" or job == "tech": 
     print "awesome" 
elif job == "tool" or job == "rock": 
     print "dolt" 

¿Hay una manera de hacer Python aceptar múltiples valores en la comprobación de "igual a"? Por ejemplo,

if job == "mechanic" or "tech": 
    print "awesome" 
elif job == "tool" or "rock": 
    print "dolt" 

Respuesta

27
if job in ("mechanic", "tech"): 
    print "awesome" 
elif job in ("tool", "rock"): 
    print "dolt" 

Los valores en paréntesis son una tupla. El operador in comprueba si el elemento del lado izquierdo se encuentra en alguna parte dentro de la tupla del identificador derecho.

Tenga en cuenta que cuando Python busca una tupla o una lista con el operador in, realiza una búsqueda lineal. Si tiene una gran cantidad de artículos en el lado derecho, esto podría ser un cuello de botella de rendimiento. Una forma de mayor escala de hacer esto sería utilizar un frozenset:

AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ]) 
def func(): 
    if job in AwesomeJobs: 
     print "awesome" 

se prefiere el uso de frozenset sobre set si la lista de puestos de trabajo impresionante no necesita ser cambiado durante la operación de su programa.

+0

Dado que tiene la respuesta aceptada, sería bueno mencionar también la operación 'item in set()' para completar. – tzot

1
if job in ("mechanic", "tech"): 
    print "awesome" 
elif job in ("tool", "rock"): 
    print "dolt" 
1

Aunque no creo que se pueda hacer lo que quiera directamente, una alternativa es:

if job in [ "mechanic", "tech" ]: 
    print "awesome" 
elif job in [ "tool", "rock" ]: 
    print "dolt" 
3

se pueden utilizar en:

if job in ["mechanic", "tech"]: 
    print "awesome" 

Al comprobar un número muy grande, también sería útil almacenar fuera un conjunto de los artículos para comprobar, ya que esto será más rápido. P.ej.

AwesomeJobs = set(["mechanic", "tech", ... lots of others ]) 
... 

def func(): 
    if job in AwesomeJobs: 
     print "awesome" 
1

Las tuplas con elementos constantes se almacenan como constantes en la función compilada. Se pueden cargar con una sola instrucción. Las listas y conjuntos, por otro lado, siempre se construyen de nuevo en cada ejecución.

Tanto las tuplas como las listas usan la búsqueda lineal para el operador interno. Conjuntos utiliza una búsqueda basada en hash, por lo que será más rápido para un mayor número de opciones.

Cuestiones relacionadas