生成固定长度的所有排列,其中元素来自两个不同的集合

时间:2017-10-20 10:14:30

标签: python python-3.x itertools

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生成置换以生成具有置换的导数。但是,从两套物品中取出物品时我遇到了问题

1 个答案:

答案 0 :(得分: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])