Je cherche essentiellement une version python de Combination ofList<List<int>>
Étant donné une liste de listes, j'ai besoin d'une nouvelle liste qui donne toutes les combinaisons possibles d'éléments entre les listes.
[[1,2,3],[4,5,6],[7,8,9,10]] -> [[1,4,7],[1,4,8],...,[3,6,10]]
Le nombre de listes est inconnu, j'ai donc besoin de quelque chose qui fonctionne dans tous les cas. Points bonus pour l'élégance!
*a
?*a
signifie que ce sont des arguments transmis à la fonction ou à la méthode.def fn(a,b,c):
répondrait à lafn(*[1,2,3])
référencea
en entrée, itère suritertools.product(*a)
etyield
s à la fois le tuple produit paritertools
et une version inverse ( par exemple créer une listereverse()
et la reconvertir en tuple). Mieux vaut poser une nouvelle question.La solution la plus élégante consiste à utiliser itertools.product en python 2.6.
Si vous n'utilisez pas Python 2.6, les documents pour itertools.product montrent en fait une fonction équivalente pour faire le produit de la manière "manuelle":
la source
J'espère que vous trouverez cela aussi élégant que moi lors de ma première rencontre.
la source
Numpy peut le faire:
la source
Rien de mal avec une récursivité directe pour cette tâche, et si vous avez besoin d'une version qui fonctionne avec des chaînes, cela pourrait répondre à vos besoins:
la source
On peut utiliser le python de base pour cela. Le code a besoin d'une fonction pour aplatir les listes de listes:
Ensuite, on peut exécuter:
Production:
la source
Production:
la source