2011-02-05 8 views

Respuesta

26

¿Quieres itertools.product:

>>> import itertools 
>>> a = [1,2] 
>>> b = [4,5] 
>>> list(itertools.product(a,b)) 
[(1, 4), (1, 5), (2, 4), (2, 5)] 
8

Si usted está interesado únicamente en el resultado, entonces itertools.product es lo que necesita (1 a @DSM para esto). Sin embargo, si está interesado en el algoritmo que genera algo como esto, se llama recursive descent. El algoritmo, en este caso, podría ser la siguiente (que sólo voy a imprimir los resultados aquí para mayor claridad):

def product(L, tmp=None): 
    if tmp is None: 
     tmp = [] 
    if L==[]: 
     print tmp 
    else: 
     for i in L[0]: 
      product(L[1:], tmp+[i]) 

Por lo tanto,

>>> product([[1,2], [4,5]]) 
[1, 4] 
[1, 5] 
[2, 4] 
[2, 5] 

Esperanza esto ayuda

+0

Me modificar este código para eliminar la variable por defecto mutable. si este código se usa como ejemplo para principiantes, entonces debería evitar este tipo de problemas. –

+0

@TimMcNamara: Tienes razón. Solo lo edité – inspectorG4dget

3

Don 't lo obvio:

out = [] 
for a in [1, 2]: 
    for b in [4, 5]: 
     out.append((a, b)) 

o listas por comprensión:

a = [1, 2] 
b = [4, 5] 
out = [(x, y) for x in a for y in b] 

Ambos producen out == [(1, 4), (1, 5), (2, 4), (2, 5)]

3

Esto se puede hacer muy bien con la lista de comprensión, o mejor aún con una expresión generador si sólo tiene que recorrer a través de las combinaciones.

Así es que está usando listas por comprensión:

a = [1, 2] 
b = [4, 5] 

[(i, j) for i in a for j in b] 

Y aquí con un generador de expresión:

for pair in ((i, j) for i in a for j in b): 
    print(pair) 
Cuestiones relacionadas