¿Cómo generar combinaciones de listas?

Quiero producir una lista de listas que represente todas las combinaciones posibles de los números 0 y 1. Las listas tienen una longitud n.

La salida debería verse así. Para n = 1:

[ [0], [1] ] 

Para n = 2:

 [ [0,0], [0, 1], [1,0], [1, 1] ] 

Para n = 3:

 [ [0,0,0], [0, 0, 1], [0, 1, 1]... [1, 1, 1] ] 

Miré itertools.combinations pero esto produce tuplas, no listas. [0,1] y [1,0] son ​​combinaciones distintas, mientras que solo hay una tupla (0,1) (el orden no importa).

¿Alguna pista o sugerencia? He intentado algunas técnicas recursivas, pero no he encontrado la solución.

Usted está buscando itertools.product(...) .

 >>> from itertools import product >>> list(product([1, 0], repeat=2)) [(1, 1), (1, 0), (0, 1), (0, 0)] 

Si desea convertir los elementos internos al tipo de list , use una lista de comprensión

 >>> [list(elem) for elem in product([1, 0], repeat =2)] [[1, 1], [1, 0], [0, 1], [0, 0]] 

O usando el map()

 >>> map(list, product([1, 0], repeat=2)) [[1, 1], [1, 0], [0, 1], [0, 0]] 

Use itertools.product , asignando la repeat a n.

 from itertools import product list(product([0,1], repeat=n)) 

Manifestación:

 >>> list(product([0,1], repeat=2)) [(0, 0), (0, 1), (1, 0), (1, 1)] >>> list(product([0,1], repeat=3)) [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)] 
 >>> from itertools import product >>> list(product([0, 1], repeat=2)) [(0, 0), (0, 1), (1, 0), (1, 1)] >>> >>> list(product([0, 1], repeat=3)) [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)] 

Para obtener la lista de la lista, puede hacer:

 >>> map(list, list(product([0, 1], repeat=2))) [[0, 0], [0, 1], [1, 0], [1, 1]] 

Solo para agregar un poco de diversidad, aquí hay otra forma de lograr esto:

 >>> [map(int, format(i, "03b")) for i in range(8)] [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]