2010-08-06 15 views
1

J'ai désespérément besoin d'aide pour l'algorithme lorsque je combine des listes dans des listes. En supposant que j'ai la structure de données suivantes:Toutes les combinaisons possibles d'une liste d'une liste

 
fields = [ ['a1', 'a2', 'a3'], 
      ['b1', 'b2', 'b3'], 
      ['c1', 'c2', 'c3'], 
      ['d1', 'd2', 'd3'] ] 

Je suis en train d'écrire un générateur (Python) qui donnera chaque combinaison possible des éléments de telle sorte que le code suivant:

 
for x in thegenerator(fields): 
    print(x) 

donnerait la sortie suivante:

 
['a1', 'b1', 'c1', 'd1'] 
['a1', 'b1', 'c1', 'd2'] 
['a1', 'b1', 'c1', 'd3'] 
['a1', 'b1', 'c2', 'd1'] 
['a1', 'b1', 'c2', 'd2'] 
['a1', 'b1', 'c2', 'd3'] 
... 
['a3', 'b3', 'c3', 'd3'] 

Cependant, mon état d'esprit est complètement aujourd'hui, je ne peux pas penser comment je peux mieux itérer la structure pour obtenir toutes les combinaisons les plus propres wa y en utilisant Python. Je suis sûr que cela a déjà été fait par quelqu'un, mais après quelques recherches sur google et stack, j'ai renoncé à trouver la bonne combinaison de mots-clés afin de trouver un algorithme approprié pour ce problème.

Des idées quel serait l'algorithme le plus propre à résoudre ce problème?

Répondre

3
itertools.product(*fields) 
+0

Vous avez raison. Avait déjà regardé brièvement dans itertools.product, mais apparemment pas assez bien puisque je pensais que la fonctionnalité a fait quelque chose d'un peu différent. Merci! – agnsaft

10

Il suffit d'utiliser itertools.product, il fait exactement ce que vous essayez de faire. Si vous êtes intéressé par l'algorithme, vous pouvez toujours regarder le code source.

+0

Nice un. 5more – InsertNickHere

+0

* honte * ... pas vraiment. J'ai regardé l'entrée manuelle pour itertools et manqué celui-ci apparemment. Merci. – agnsaft