2017-10-20 73 views
0

python itertools中是否有任何函數需要生成滿足某些條件的所有數字排列。生成固定長度的所有排列,其中元素來自兩個不同的集合

(A,B,C,d)

  • a和d:來自set 1 = {1,2,3}
  • b和c:來自set 2,其中元件的數量設定2是196.
  • 排列需要與替換。

所以A和B應該只值從1集B和C只能從集2.如何生成所有與該限制permutaitons取值

我知道如何產生使用itertools進行置換以生成置換的置換。但我有問題,當談到採取項目從兩套

+0

但是我不明白這些是如何排列的... –

+1

所以......你需要爲兩組生成排列並計算笛卡爾積? (並安排結果一點)從你的問題不是很清楚^^ – spectras

+0

什麼意思'ie | set 2 |是196'? – RomanPerekhrest

回答

1

如果我正確地解釋你的文字,下面的代碼應該是你在找什麼:

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])) 

打印

(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) 

正如@spectras所示,產品更優雅:

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

正如@spectras建議的那樣,另一種方法是使用產品三次,然後重新排序條目。但是這個也適用。 –

+1

是的,編輯我的答案,但kidos到@spectras – andymar

相關問題