J'ai expérimenté un certain nombre de techniques, mais je suis sûr qu'il y a une manière lisse-ish de faire ce fait.
Supposons que j'ai deux listes avec la même quantité d'articles d'eux (4 chacun):
ab12 a1b2 a12b 1ab2 1a2b 12ab
5 Réponses :
Dans l'affaire 2x4, vous souhaitez prendre tous les 8 éléments sans perturber la commande dans chaque quad. Ces exemples:
a = ['a', 'b', 'c', 'd'] b = [1, 2, 3, 4] for res in combos(a, b): print res
Belle perspicacité, envisagez-vous de préparer une mise en œuvre?
J'en ai ajouté un, j'aime bien cette approche que la récursive parce que c'est trivial de le généraliser.
@SIHA: Merci, je voudrais juste être modifié dans ma réponse une note à ce sujet et comment la réparer.
Merci! Cela a fonctionné bien. La logique est élégante. Vous, John .. sont l'homme!
L'option alternative consiste à utiliser la récursive.
pseudocode: p>
Une approche récursive avec python:
Une option consiste à utiliser un compteur où les bits définis correspondent à l'élément sur A code> et non défini sur l'élément sur
B code>. Pour chaque valeur en comptoir Vérifier s'il y a
len (A) code> BITS définit et génère une permutation:
['a', 'b', 1, 2]
['a', 1, 'b', 2]
['a', 1, 2, 'b']
[1, 'a', 'b', 2]
[1, 'a', 2, 'b']
[1, 2, 'a', 'b']
J'ai trouvé une solution qui fonctionne uniquement pour deux séquences, mais utilise Je comprends vaguement qu'il est possible de gérer un plus grand nombre de listes fusionnant la 3ème liste avec chacune des listes générées à partir des premier et secondes, etc., etc. idée qui pointe dans la direction d'une mise en œuvre récursive, mais je suis heureux de laisser une telle accomplissement à quelqu'un d'autre ... p> J'ai supprimé la machine compteur, Comme itTools.combinations () code> pour trouver uniquement les séquences possibles des positions dans lesquelles placer (dans l'ordre ...) les éléments de la première séquence
Edit 1 h3>
iTERTOOLS.Cycle () code> Les objets sont exactement ce qui est nécessaire. p>
sortie de test h3>