Básicamente estoy buscando una versión python de Combination ofList<List<int>>
Dada una lista de listas, necesito una nueva lista que proporcione todas las combinaciones posibles de elementos entre las listas.
[[1,2,3],[4,5,6],[7,8,9,10]] -> [[1,4,7],[1,4,8],...,[3,6,10]]
El número de listas es desconocido, por lo que necesito algo que funcione para todos los casos. ¡Puntos de bonificación por elegancia!
python
combinations
Lin
fuente
fuente
*a
?*a
significa que estos son argumentos que se pasan a la función o método.def fn(a,b,c):
respondería a lafn(*[1,2,3])
referenciaa
como entrada, itereitertools.product(*a)
yyield
s la tupla producida poritertools
y una versión inversa ( Por ejemplo, crear una listareverse()
y convertirla de nuevo en tupla). Mejor hacer una nueva pregunta.La solución más elegante es usar itertools.product en python 2.6.
Si no está utilizando Python 2.6, los documentos para itertools.product en realidad muestran una función equivalente para hacer el producto de forma "manual":
fuente
Espero que lo encuentres tan elegante como yo cuando lo encontré por primera vez.
fuente
Numpy puede hacerlo:
fuente
No hay nada malo en la recursividad directa para esta tarea, y si necesita una versión que funcione con cadenas, esto podría satisfacer sus necesidades:
fuente
Uno puede usar Python base para esto. El código necesita una función para aplanar listas de listas:
Entonces uno puede ejecutar:
Salida:
fuente
Salida:
fuente