2017-10-20 54 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

相关问题