Domanda

    

Questa domanda ha già una risposta qui:

         

Quando usi le istruzioni IF in Python, devi fare quanto segue per fare il "quotato" " funziona correttamente.

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

C'è un modo per fare in modo che Python accetti più valori quando si verifica che " sia uguale a " ;? Ad esempio,

if job == "mechanic" or "tech":
    print "awesome"
elif job == "tool" or "rock":
    print "dolt"
È stato utile?

Soluzione

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

I valori tra parentesi sono una tupla. L'operatore in verifica se l'elemento sul lato sinistro si trova da qualche parte all'interno della tupla della maniglia destra.

Nota che quando Python cerca una tupla o un elenco usando l'operatore in , fa una ricerca lineare. Se hai un gran numero di articoli sul lato destro, questo potrebbe essere un collo di bottiglia nelle prestazioni. Un modo più ampio per farlo sarebbe quello di utilizzare un frozenset :

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

L'uso di frozenset su set è preferito se l'elenco dei lavori fantastici non ha bisogno di essere modificato durante il funzionamento del programma.

Altri suggerimenti

Puoi usare in:

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

Quando si controllano numeri molto grandi, può anche valere la pena archiviare una serie di elementi da controllare, poiché sarà più veloce. Eg.

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

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

Anche se non credo che tu possa fare direttamente quello che vuoi, un'alternativa è:

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

Le tuple con elementi costanti vengono memorizzate come costanti nella funzione compilata. Possono essere caricati con una singola istruzione. Elenchi e set d'altro canto, sono sempre costruiti di nuovo su ogni esecuzione.

Sia le tuple che gli elenchi utilizzano la ricerca lineare per l'operatore. Sets utilizza una ricerca basata su hash, quindi sarà più veloce per un numero maggiore di opzioni.

In altre lingue userei un'istruzione switch / select per completare il lavoro. Puoi farlo anche in Python .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top