2008-09-29 7 views
5

Lors de l'utilisation d'instructions IF en Python, vous devez effectuer les opérations suivantes pour que la "cascade" fonctionne correctement.Utilisation de comparaisons OU avec des instructions IF

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

Y at-il un moyen de faire accepter plusieurs valeurs Python lors de la vérification des « égaux à »? Par exemple,

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

Répondre

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

Les valeurs entre parenthèses sont un tuple. L'opérateur in vérifie si l'élément de gauche se trouve quelque part dans le tuple de la poignée de droite.

Notez que lorsque Python recherche un tuple ou une liste à l'aide de l'opérateur in, il effectue une recherche linéaire. Si vous avez un grand nombre d'éléments sur le côté droit, cela peut être un goulot d'étranglement. Une façon plus grande échelle de le faire serait d'utiliser un frozenset:

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

L'utilisation de frozenset sur set est préférable si la liste des emplois impressionnants n'a pas besoin d'être changé au cours de l'opération de votre programme.

+0

Puisque vous avez la réponse acceptée, il serait bon de mentionner également l'opération 'item in set()' pour l'exhaustivité. – tzot

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

Bien que je ne pense pas que vous pouvez faire ce que vous voulez directement, une alternative est:

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

Vous pouvez utiliser dans:

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

Lors de la vérification de très grands nombres, il peut également être utile de stocker au large un ensemble des éléments à vérifier, car ce sera plus rapide. Par exemple.

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

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

Les tuples avec des éléments constants sont stockés eux-mêmes comme des constantes dans la fonction compilée. Ils peuvent être chargés avec une seule instruction. D'autre part, les listes et les ensembles sont toujours construits à chaque exécution. Les deux tuples et listes utilisent une recherche linéaire pour l'opérateur interne. Sets utilise une recherche basée sur le hachage, de sorte qu'il sera plus rapide pour un plus grand nombre d'options.

Questions connexes