2017-10-20 19 views
0

Y at-il une fonction dans python itertools où toutes les permutations de nombres qui satisfont certains critères doivent être générées.Génère toutes les permutations de longueur fixe où les éléments proviennent de deux ensembles différents

(a, b, c, d)

  • a et d: provient de set 1 = {1,2,3}
  • b et c: provient de set 2, où le nombre d'éléments mis 2 est 196.
  • La permutation doit être avec remplacement.

donc a et b ne devrait prendre que des valeurs de jeu et 1 b et c doivent prendre des valeurs que de jeu 2. Comment puis-je générer toutes les permutaitons avec lesdites restrictions

Je sais comment générer permutation en utilisant itertools pour générer des enetries avec permutation. Mais j'ai problème quand il s'agit de prendre des éléments de deux ensembles

+0

Mais je ne vois pas comment ce sont les permutations ... –

+1

Alors ... vous devez générer des permutations pour les deux ensembles et calculer le produit cartésien? (et arrangez le résultat un peu) Ce n'est pas très clair à partir de votre question ^^ – spectras

+0

ce que signifie 'ie | set 2 | est 196'? – RomanPerekhrest

Répondre

1

Si j'interprétais votre texte correctement, le code suivant doit être ce que vous cherchez:

import itertools 
set1 = [1,2,3] 
set2 = [4,5] 

for i in itertools.permutations(set1, 2): 
    for j in itertools.permutations(set2, 2): 
     print("({},{},{},{})".format(i[0], j[0], j[1], i[1])) 

Prints

(1,4,5,2) 
(1,5,4,2) 
(1,4,5,3) 
(1,5,4,3) 
(2,4,5,1) 
(2,5,4,1) 
(2,4,5,3) 
(2,5,4,3) 
(3,4,5,1) 
(3,5,4,1) 
(3,4,5,2) 
(3,5,4,2) 

Comme @spectras suggère, un produit est plus élégant:

p1 = itertools.permutations(set1, 2) 
p2 = itertools.permutations(set2, 2) 

for i in itertools.product(p1, p2): 
    print(i[0][0], i[1][0], i[1][1], i[0][1]) 
+0

Comme suggéré @spectras, une autre façon est d'utiliser le produit trois fois, puis de réorganiser les entrées. Mais celui-ci fonctionne aussi bien. –

+1

Yup, éditer ma réponse mais kidos à @spectras – andymar