2011-12-27 26 views
23

Estoy usando Python y me gustaría tener una instrucción if con muchas variables.¿Comparar variables múltiples con el mismo valor en "si" en Python?

tales como:

if A, B, C, and D >= 2: 
     print (A, B, C, and D) 

Soy consciente de que esta no es la sintaxis correcta y que es exactamente la pregunta que estoy pidiendo - ¿cuál es la sintaxis de Python correcta para este tipo de una sentencia if? ¡Gracias!

+0

ver también http://stackoverflow.com/questions/8641089/python-equivalent-of-linq-all-function –

Respuesta

41

Qué tal esto:

if all(x >= 2 for x in (A, B, C, D)): 
    print A, B, C, D 

Esto debería ser útil si se está probando una larga lista de variables con el misma condición.

+0

Ya estoy inclinado hacia su respuesta, ya que tengo una lista bastante larga de variables. ¡Gracias! – chingchong

+0

Lo que no entiendo completamente es por qué hay 2 paréntesis en un lado y tres en el otro. ¿No debería haber solo 1 en cada lado? – chingchong

+3

Un último comentario: hay un par de paréntesis innecesarios, simplemente puede escribir: 'all (x> = 2 para x in (A, B, C, D))' –

1

¿Qué tal:

if A >= 2 and B >= 2 and C >= 2 and D >= 2: 
    print A, B, C, D 

Para el caso general, no es un camino más corto para indicar que la misma condición debe ser verdadera para todas las variables - a menos que esté dispuesto a poner las variables en una lista, para eso echa un vistazo a algunas de las otras respuestas.

+0

Gracias! Tengo 10 variables ¿es su cosa lo que requiere menos tipeo? – chingchong

+0

Si necesita probar la misma condición (> = 2) y todas las variables son números, la respuesta de @Fred Larson es la solución más corta (aunque un poco difícil de entender de un vistazo) –

+0

Si necesito hacer otras condiciones, la ¿La respuesta provista por DSM es la mejor? – chingchong

1

Excepto que ella probablemente pidiendo esto:

if A >= 2 and B >= 2 and C >= 2 and D >= 2: 
+2

La diferencia es? ... – Cameron

+0

¿Cuál es la diferencia? – chingchong

16

Otra idea:

if min(A, B, C, D) >= 2: 
    print A, B, C, D 
+3

no tan fácil de entender de un vistazo. –

+1

Funciona para este caso en particular, pero, en general, no se puede comparar la misma condición para múltiples variables a la vez –

+0

¿Qué significa min? – chingchong

1

Dependiendo de lo que está tratando de lograr, pasando una lista a una función que puede funcionar.

def foo(lst): 
    for i in lst: 
     if i < 2: 
      return 
    print lst 
+0

¡Uy! Acabo de publicar la misma respuesta que la tuya. LOL –

+0

Si pudiera explicar lo que está haciendo con más detalle, realmente me ayudaría. ¡Gracias! – chingchong

+0

Pasa la función una lista de números. Para cada elemento de la lista, verifique si el artículo es menor que 2: si el artículo es menor que 2, la función "regresa" (o sale) sin imprimir nada. Continua revisando cada elemento en la lista. Una vez que se ha verificado cada elemento y ningún elemento ha provocado que la función vuelva a salir o salga, sabemos que TODOS los elementos son> = 2, por lo que podemos imprimir la lista. – Phil

6

probablemente me escribo esto como

v = A, B, C, D 
if all(i >= 2 for i in v): 
    print v 
+0

¡Gracias! Para aclarar el significado de lo que me está diciendo ... Si tuviera A, B, C y D. ¿Podría decir v = A, B, C, D (RETORNO? No puedo hacer que la etiqueta de código funcione) si todo (v> = 2): (RETORNO) imprime (v)? – chingchong

+1

@TerriMoore: No, porque eso sería preguntar si la tupla (A, B, C, D) era mayor o igual a 2, no si todos los valores son> = 2. Por razones técnicas que en realidad no aumentarán una Excepción en python 2, solo dará resultados inesperados, pero generará un error (como debería) en Python 3. – DSM

+0

Estoy usando Python 3. ¿Qué vería exactamente con lo de "i in v"? – chingchong

3

Si tiene diez variables que está tratando como un grupo como este, probablemente desee convertirlas en elementos de una lista, valores en un diccionario o atributos de un objeto. Por ejemplo:

my_dict = {'A': 1, 'B': 2, 'C': 3 } 

if all(x > 2 for x in my_dict.values()): 
    print "They're all more than two!" 
+0

No, eso no es lo que estoy tratando de lograr aquí. Pero gracias de todos modos! – chingchong

Cuestiones relacionadas