2011-08-23 31 views
7

yo a querer hacer algo así comobucles for anidados en Python

for a in [0..1]: 
    for b in [0..1]: 
     for c in [0..1]: 
      do something 

embargo, podría tener 15 variables diferentes. ¿Hay una manera más simple como

for a, b, c in [0..1]: 
    do something 

Gracias por cualquier ayuda

Respuesta

10

itertools.product:

import itertools 
for a,b,c in itertools.product([0, 1], repeat=3): 
    # do something 
+3

Use 'repeat = 3' – agf

+0

@agf ¡Gracias, listo! Aunque '[[0,1]] * 3' también se ve bien. – phihag

+4

Mi única queja es que tardó tanto tiempo en responder. Hubo un período de aproximadamente 30 segundos en el que estaba en el limbo. – Graphth

3

Puede iterar sobre el producto de todos ellos. Use itertools.product y pase en sus rangos.

import itertools 
for i in itertools.product(range(2), range(3), range(2)): 
print (i) 

produce

(0, 0, 0) 
(0, 0, 1) 
(0, 1, 0) 
(0, 1, 1) 
(0, 2, 0) 
(0, 2, 1) 
(1, 0, 0) 
(1, 0, 1) 
(1, 1, 0) 
(1, 1, 1) 
(1, 2, 0) 
(1, 2, 1) 
1

Suena como que tiene una matriz/lista de variables que hay que procesar. Por lo tanto, la mejor (y más rápida) solución es usar una herramienta de matriz/lista.

Tales como: El paquete Python itertools.

Como otros han insinuado, itertools.product es probablemente lo que usted desea. Pero, consulte la lista completa en: http://docs.python.org/library/itertools.html

Buena suerte.

Cuestiones relacionadas