2012-02-15 16 views
9

quiero para determinar si una lista contiene una determinada cadena, así que usar una expresión del generador, así:expresión generadora Python paréntesis rareza

g = (s for s in myList if s == myString) 
any(g) 

Por supuesto que quiero inline esto, así que hacer:

any((s for s in myList if s == myString)) 

entonces creo que se vería mejor con parens individuales, así que trato:

any(s for s in myList if s == myString) 
no

realmente expe ctingándolo trabajo. ¡Sorpresa! ¡lo hace!

¿Es esto legal Python o simplemente algo que mi implementación permite? Si es legal, ¿cuál es la regla general aquí?

Respuesta

11

Es legal, y la regla general es que necesita paréntesis alrededor de una expresión de generador. Como excepción especial, los paréntesis de una llamada de función también cuentan (para funciones con solo un parámetro). (Documentation)

Tenga en cuenta que las pruebas si aparece en my_stringmy_list es tan fácil como

my_string in my_list 

Ninguna expresión generador o llamar a any() es necesario!

+0

Gracias por la respuesta. 'my_string in my_list' fue lo primero que probé, pero no pudo encontrar una cadena que estuviera presente. Llegué a la conclusión de que estaba haciendo comparación de objetos en lugar de comparación de valores, que es lo que necesito. Voy a verificar nuevamente. – Ari

+0

@Ari: No, vale la comparación de valores. No sé qué salió mal en tu caso. –

+0

Sí, funciona. Supongo que tuve algún otro error allí. – Ari

3

Es "legal" y se admite expresamente. La regla general es "((x)) es siempre el mismo que (x)" (aunque (x) no siempre es lo mismo que x, por supuesto,) y se aplica a las expresiones del generador simplemente por conveniencia.

+2

Solo para aclarar, 'x' no es un marcador de posición para cualquier cosa aquí. 'f ((a, b))' es, por supuesto, diferente de 'f (a, b)'. –

+1

Sí, de hecho, es un marcador de posición para una sola expresión. –

+0

¿Puede proporcionar una referencia para esta regla (que (((x)) es siempre la misma que (x))? – Ari

Cuestiones relacionadas