2011-03-18 48 views
8

Me pregunto si hay una manera de hacer lo siguiente en un estilo más compacto:Python estilo de comparaciones múltiples?

if (text == "Text1" or text=="Text2" or text=="Text3" or text=="Text4"): 
    do_something() 

El problema es que tengo más que sólo 4 comparaciones en la sentencia if y se está empezando a parecer bastante largo, ambigua , y feo. ¿Algunas ideas?

Respuesta

16

¿Qué tal esto:

if text in ('Text1', 'Text2', 'Text3', 'Text4'): 
    do_something() 

Siempre he encontrado que simple y elegante.

+0

El estilo de Python habitual no coloca espacios entre paréntesis. @Brent tenía razón, pero la eliminó por alguna razón. –

+0

Justo lo que estaba buscando, gracias, mi código se ve mucho mejor ahora :) – Symon

+0

@GlennMaynard: Gracias por el recordatorio de pep-8. Personalmente, me parece más legible tener los espacios dentro de parens, pero debería recordar dejarlos en ejemplos. –

7

La respuesta "if text in" es buena, pero también puede pensar en el paquete re (expresiones regulares) si las cadenas de texto se ajustan a un patrón. Por ejemplo, tomando su ejemplo literalmente, "Texto" seguido de un dígito sería una expresión regular simple.

Aquí hay un ejemplo que debería funcionar para "Texto" seguido de un dígito. la \ Z coincide con el final de la cadena, el \ d a dígito.

if re.match('Text\d\Z', text): 
    do_something() 
+0

Habría votado que este es un ejemplo ... – martineau

+0

He editado en un ejemplo. – dsmccoy

+0

Ahora que es más como eso. ;-) (En realidad, no necesitas la parte '! = None', por cierto.) – martineau

Cuestiones relacionadas