2008-12-01 8 views

Respuesta

14

¿Estás preguntando sobre esto?

[ (i,j) for i in range(1,3) for j in range(1,5) ] 
+0

Sí señor, estaba pidiendo eso. No sabía si era posible y qué sintaxis usar, gracias. –

+0

¡Dulce! Me había perdido totalmente esta característica. –

2

Esto parece hacer lo que usted describe:

[[a, b] en un rango (1,3) para B en el rango (1,5)]

ACTUALIZACIÓN: ¡Drat! Debería haber recargado la página para ver la respuesta de S.Lott antes de publicarla. Hmmm ... ¿qué hacer para agregar un poco de valor? Quizás un breve testimonio de la utilidad del modo interactivo con Python.

Vengo recientemente de un fondo con Perl, así que con problemas como este me resulta muy útil escribir "python" en la línea de comandos y pasar al modo interactivo y a) comenzar a probar cosas, yb) refinar el detalles al presionar la flecha hacia arriba y ajustar mi intento anterior hasta que obtenga lo que quiero. Cada vez que estoy confuso con alguna palabra clave, la ayuda está a la mano. Simplemente escriba: help ("some_keyword"), lea el breve resumen, luego presione "Q" y vuelvo a estar en línea en una conversación directa con el intérprete de Python.

Recomendado si usted es un principiante y no lo usa.

7

El producto cartesiano está en el itertools module (en 2.6).

>>> import itertools 
>>> list(itertools.product(range(1, 3), range(1, 5))) 
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4)] 
4

Dato curioso acerca de la comprensión anidada: imita anidado "para" bucles, por lo que los internos pueden utilizar los valores de los exteriores. Esto no es útil en el caso del producto cartesiano, pero es bueno saberlo. Por ejemplo:

[ (i,j) for i in range(10) for j in range(i) ] 

genera todos los pares (i,j) donde 0>=i>j>10.

+0

Aún más interesante. ¡Gracias! –

Cuestiones relacionadas