2012-05-16 18 views
7

C'è un modo per abbreviare un'istruzione di confronto in python in modo che non debba scrivere di nuovo l'intera cosa? Per esempio, invece di:abbreviazione di un doppio confronto in python

a=3 
if a==3 or a==2: 
    print "hello world" 

potrei fare qualcosa di simile: se a == (3 o 2): print "Ciao mondo"

so che l'esempio di cui sopra non funzionerà, ma c'è un altro modo in cui posso ottenere l'effetto desiderato?

risposta

13
if a in (2, 3): 
    print "hello world" 
+0

Modifica la tua: è preferibile utilizzare una tupla anziché una lista? – Levon

+4

@Levon: Non ho una forte preferenza in entrambi i casi, ma ai miei occhi una tupla sembra leggermente più naturale qui. – NPE

+0

ok, grazie .. So che a volte ci sono sottili differenze, volevo solo assicurarmi di non aver perso nulla, perché di solito uso liste per questo. – Levon

10

soluzioni possibili, a seconda di cosa esattamente si vuole:

  • if a in (2,3)
  • if a in xrange(2, 4)
  • if 2 <= a <= 3
+0

C'è un vantaggio nell'uso di 'xrange' invece di' range' in questo caso? Sono così felice che Python 3 abbia eliminato 'xrange'. –

+0

@MarkRansom In questo caso probabilmente non ha importanza. – robert

+0

@robert + 1ma se non importa sarebbe meglio usare l'intervallo per la compatibilità con py3x. – jamylak

10

Guarda Python 3.2 Optimizations per quanto riguarda la ragione per la risposta qui sotto.

a = 3 
if a in {2, 3}: 
    print('Hello, world!') 
+1

+1 L'utilizzo di un set è il modo migliore per questo. – jamylak